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
- iOS POS之8583报文组装工具
- swift POS8583报文组装工具
- swift 8583报文组装库
- ISO8583报文工具类(组装和解析报文)
- ISO8583报文工具类(组装和解析报文)
- Socket协议Loadrunner脚本+8583报文解析及组装
- 8583报文工具
- 银联Iso8583报文 POS终端报文结构
- iOS POS之3DES加密
- ESC/POS 工具类
- 点对点通信过程报文组装流程
- linux内核学习笔记------ip报文组装
- IP数据报文的分片和组装
- 组装xml报文,批量开户,shell版
- 组装json格式报文 -- java内部类
- iOS POS之 AsyncSocket release环境运行崩溃问题
- 组装http报文调用小黄鸡网页端消息接口
- iOS搜索请求之汉字搜索无报文返回
- Android 画虚线显示实线的BUG
- TCP详解(3):重传、流量控制、拥塞控制……
- mysql 联表查询(内联、左联、右联、全联)的语法
- 正则表达式学习笔记(一)──转义、替换、匹配
- 系统/服务器优化
- iOS POS之8583报文组装工具
- Android 开发 计时器的实现
- malloc(0)返回什么地址?
- centos 6.5 源码安装apache
- 有的人——理我,是因为我有快乐我好
- 「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个?
- Unix网络编程卷1源代码使用
- simple-framework(MaliSDK框架分析)
- mysqldump: Got error: 2003: Can't connect to MySQL server on '127.0.0.1' (10061)