iOS POS之8583报文组装工具

来源:互联网 发布:snmp端口161与162用途 编辑:程序博客网 时间:2024/05/17 03:22

在组装8583报文时会遇到各种转码,比如:ASCII转Hex , data数据转相应的16进制字符串。

在这里我把代码贴出来,当然了,我这份代码也是在各处搜集而来,并不是自己开发的。


@interface NSString (Trans)

/**

 *  十六 进制字符串转换为 data

 *  24211D3498FF62AF  -->  <24211D34 98FF62AF>

 *

 *  @param str 要转换的字符串

 *

 *  @return 转换后的数据

 */

+ (NSData*)hexToBytes:(NSString *)str;



/**

 *  data 转换为十六进制字符串

 *  <24211D34 98FF62AF>  -->  24211D3498FF62AF

 *

 *  @param data 要转换的data

 *

 *  @return 转换后的字符串

 */

+ (NSString *)hexStringFromData:(NSData *)data;


/**

 *  byte转为字符串

 *

 *  @param byteVal byte

 *

 *  @return 

 */

+ (NSString *)stringFromByte:(Byte)byteVal;


/**

 *  hex字符串转为ASC  00 --> 3030

 *

 *  @param hex hex字符串

 *

 *  @return 转码后的ASC字符串

 */

+ (NSString *)hexToAsc:(NSString *)hex;


/**

 *  ASC码转为Hex字符串  3030 --> 00

 *

 *  @param asc ASC字符串

 *

 *  @return 转码后的Hex字符串

 */

+ (NSString *)ascToHex:(NSString *)asc;


@end



@implementation NSString (Trans)


+(NSData*)hexToBytes:(NSString *)str{

    

    NSMutableData* data = [NSMutableDatadata];

    

   int idx;

    

   for (idx = 0; idx+2 <= str.length; idx+=2) {

        

       NSRange range = NSMakeRange(idx,2);

        

       NSString* hexStr = [str substringWithRange:range];

        

       NSScanner* scanner = [NSScannerscannerWithString:hexStr];

        

       unsigned int intValue;

        

        [scannerscanHexInt:&intValue];

        

        [dataappendBytes:&intValue length:1];

        

    }

    

   return data;

}


+ (NSString *)hexStringFromData:(NSData *)data{

    

    NSMutableString *str = [NSMutableStringstring];

    

   Byte *byte = (Byte *)[databytes];

    

   for (int i =0; i<[data length]; i++) {

        

        // byte+i为指针

        

        [strappendString:[selfstringFromByte:*(byte+i)]];

        

    }

    

   return str;

    

}


+ (NSString *)stringFromByte:(Byte)byteVal{

    

    NSMutableString *str = [NSMutableStringstring];

    

    //取高四位

    

   Byte byte1 = byteVal>>4;

    

    //取低四位

    

   Byte byte2 = byteVal & 0xf;

    

    //拼接16进制字符串

    

    [strappendFormat:@"%x",byte1];

    

    [strappendFormat:@"%x",byte2];

    

   return str;

    

}


/**

 *  hex字符串转为ASC  00 --> 3030

 *

 *  @param hex hex字符串

 *

 *  @return 转码后的ASC字符串

 */

+ (NSString *)hexToAsc:(NSString *)hex{

   char szData[1024]={0};

   const char *pBytes =  [hexUTF8String];

   if(NULL != pBytes)

    {

       for(int i=0; i<hex.length; i++)

        {

           char tmp[16];

           sprintf(tmp, "%0.2X",pBytes[i]);

           strcat(szData, tmp);

        }

       return [NSStringstringWithFormat:@"%s",szData];

    }

    return nil;

}


/**

 *  ASC吗转为Hex字符串  3030 --> 00

 *

 *  @param asc ASC字符串

 *

 *  @return 转码后的Hex字符串

 */

+ (NSString *)ascToHex:(NSString *)asc{

   char szData[1024]={0};

   const char *ascBytes =  [ascUTF8String];

   if (NULL != ascBytes) {

        [selfascToHex:ascBytes len:asc.length outAscii:szData];

        

       return [NSStringstringWithFormat:@"%s",szData];

    }

    return nil;

}


+ (void)ascToHex:(constchar *)hex len:(NSUInteger)length outAscii:(char *)ascii

{

   for (int i =0; i < length; i += 2)

    {

       if (hex[i] >= '0' && hex[i] <='9')

            ascii[i /2] = (hex[i] - '0') <<4;

       else if (hex[i] >='a' && hex[i] <= 'z')

            ascii[i /2] = (hex[i] - 'a' +10) << 4;

       else if (hex[i] >='A' && hex[i] <= 'Z')

            ascii[i /2] = (hex[i] - 'A' +10) << 4;

        

       if (hex[i + 1] >='0' && hex[i + 1] <='9')

            ascii[i /2] += hex[i + 1] -'0';

       else if (hex[i +1] >= 'a' && hex[i +1] <= 'z')

            ascii[i /2] += hex[i + 1] -'a' + 10;

       else if (hex[i +1] >= 'A' && hex[i +1] <= 'Z')

            ascii[i /2] += hex[i + 1] -'A' + 10;

    }

}


@end




另外我也把资源传到了网上可以下载

http://download.csdn.net/detail/u012884714/8911101


如有问题,欢迎一起来讨论  ———— LC



1 0
原创粉丝点击