iOS POS之8583报文组装工具

在组装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 = [NSMutableData data];

    

    int idx;

    

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

        

        NSRange range = NSMakeRange(idx, 2);

        

        NSString* hexStr = [str substringWithRange:range];

        

        NSScanner* scanner = [NSScanner scannerWithString:hexStr];

        

        unsigned int intValue;

        

        [scanner scanHexInt:&intValue];

        

        [data appendBytes:&intValue length:1];

        

    }

    

    return data;

}


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

    

    NSMutableString *str = [NSMutableString string];

    

    Byte *byte = (Byte *)[data bytes];

    

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

        

        // byte+i为指针

        

        [str appendString:[self stringFromByte:*(byte+i)]];

        

    }

    

    return str;

    

}


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

    

    NSMutableString *str = [NSMutableString string];

    

    //取高四位

    

    Byte byte1 = byteVal>>4;

    

    //取低四位

    

    Byte byte2 = byteVal & 0xf;

    

    //拼接16进制字符串

    

    [str appendFormat:@"%x",byte1];

    

    [str appendFormat:@"%x",byte2];

    

    return str;

    

}


/**

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

 *

 *  @param hex hex字符串

 *

 *  @return 转码后的ASC字符串

 */

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

    char szData[1024]={0};

    const char *pBytes =  [hex UTF8String];

    if(NULL != pBytes)

    {

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

        {

            char tmp[16];

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

            strcat(szData, tmp);

        }

        return [NSString stringWithFormat:@"%s",szData];

    }

    return nil;

}


/**

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

 *

 *  @param asc ASC字符串

 *

 *  @return 转码后的Hex字符串

 */

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

    char szData[1024]={0};

    const char *ascBytes =  [asc UTF8String];

    if (NULL != ascBytes) {

        [self ascToHex:ascBytes len:asc.length outAscii:szData];

        

        return [NSString stringWithFormat:@"%s",szData];

    }

    return nil;

}


+ (void)ascToHex:(const char *)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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值