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



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本软件可以模拟不同类型的交易报文,可以对交易测试案例进行统一管理,并可以进行简单时间统计和成功率统计。 使用本软件可以减轻传统测试过程中的修改-编译-测试-的循环等待时间,在测试过程中可以根据需要随时更改报文内容。 本软件支持任意格式的报文,可以模拟不同格式的报文,如定长,变长,XML,8583报文。每个域的内容可以是常量,也可以支持约定的表达式。 本软件可以根据需要设置对应答相关域进行合法性检查,可以校验应答报文和请求报文的匹配关系,可以校验域的长度,校验域的内容等。 本软件支持MAC的生成、校验以及PIN加密处理,同时可以根据需要调整是否需要进行MAC和PIN加密。 支持服务端功能,根据不同的报文设置不同的应答报文。 本软件运行程序无需安装,只需将相关程序和测试案例文件拷贝到相应的文件夹下即可执行。 Version 1.7.0 521 修正一些BUG,增加服务端的设置。 Version 1.6.4.405 增加了应答服务的交易码解析,根据解析后的交易码匹配应答案例。 增加了再次接收长度,对于特殊报文,可先读取一定长度的内容,再根据此配置读取指定长度。 Version 1.6.4.317 增加了应答报文的处理,配置案例文件如:_resp.txt(以_开头),按该文本内容格式发出报文。 增加了服务配置的接收长度属性,指明长度(如96:按96长度位固定接收),或者(a4-按4位长度位接收,b2-按2位BCD码长度位接收)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值