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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-16 11:09:26

iOS POS之8583报文组装工具的相关文章

iOS POS之3DES加密

最近在做支付类APP,遇到了很多以前没遇到过的东西.接下来我会用这系列文章来记录我所遇到的问题. 首先就是在组8583报文时用到的3DES加密.8583报文是以字节为单位的所以可能3DES加密会有稍许不同. 我自己搞这个问题也搞了两天,最后还是拜托一个高手给搞定的. 我在网上也搜了很多资料最后发现有一帖子很接近答案.链接如下: http://www.cocoachina.com/bbs/read.php?tid=245410 请教高手所做的就是把哈希那句给去掉然后稍微做下处理,有兴趣的同学可以自

Jmeter+8583报文压力测试

Jmeter一般被用来测试HTTP协议,我第一次拿来测试socket协议,pos机传输报文为8583,协议属于socket,也是TCP协议的一种,网上有LR怎么测试8583报文,我就研究了一下怎么用Jmeter来测试,以下是我的研究结果,供大家参考 1.先打开\apache-jmeter-3.1\bin\jmeter.propertles文件,修改jmeter.propertles中的"TCP Sampler configuration"内容,见附图,添加"tcp.handl

8583报文的使用和解析

ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分. 8583包前面一段为位图,用来确定包的字段域组成情况. 其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础.在POS机的开发上时经常要用到,例如回头客会员管理系统在POS机上的应用就是采用8583报文. "消费"类型报文的测试和组8583报文的过程,说明一下,这里是针对我们日常使用POS机系统来

8583报文(转)

1 8583报文 1.1 数据包格式 ISO 8583金融交易信息数据包由信息类型(MSG_TYPE_ID).一个或多个位图(BIT_MAP)和按位图描述的顺序排列的数据元序列(ELEMENTS)等三段组成. 信息类型是一个4位数字的数字型字段,用来描述每一个交易信息的类别和功能,其中前两位数字标明信息类别,如授权信息.金融交易信息.管理信息,等等.在一个金融系统中,信息类型的定义应该是唯一的,无二义性的.网间交易具有不同的信息类型定义时应在交换报文的发送前和接收后完成类型转换处理. 位图由64

转:8583报文手动组包——详细分析每个示范域

8583报文作为一种应用较广的报文,有它独特的格式. 网上有关8583报文的说明很多.但涉及到每个域的详细例子就较少了.这里列出各个域的详细例子,供参考. 8583报文: 报文组成: 报文头[长度(2字节)+TPDU(5字节)+报文版本号(2字节)]+信息类型+位图+数据 TPDU: 6000100000 报文长度:整体报文长度 -报文头中的2字节长度.如8583整体报文长度为100,那么报文长度为98.用两字节的BCD码表示(16进制)为0062.手动组装的8583报文: 0072600010

转载:8583报文简单分析

http://blog.csdn.net/pony_maggie/article/details/6568192 不要以为我这篇文章是告诉你什么是8583,告诉你map的原理,然后分析各个域是什么意思,格式如何, 再有详细一点的甚至告诉你如何写程序等等. 不是, 之所以不写上面这些,基于两点:1 太多的人写这些了, 网上一搜8583,出来的文章都是关于这些的. 2 作用不大, 因为这些规范上都有, 大家一看规范就明白了, 我写了也是无用. 我篇文章适合两类人看:1 对8583报文非常熟悉,属于这

iOS开发者必备的10款工具

当前iOS和Android两大移动操作系统"二足鼎立",几乎覆盖了市面上大部分的智能手机.相比Android,iOS开发适配更简单,且随着各种实用工具和Swift语言的出现,iOS开发门槛地降低,开发前景巨大.而对于开发者和设计师来说,是否拥有一款功能强大且实用的开发工具将直接影响其工作效率和成果.为此,我们结合现有资讯.整合最新资源,从开发.设计.分析.内测分发等方面整理出"iOS开发者必备的十款工具"供大家参考. 开发环境: 1)Xcode 作为苹果公司的当家I

iOS开发——实用篇&amp;提高iOS开发效率的方法和工具

提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时在使用AppCode等其他的IDE,在这里我主要介绍Xcode中提升开发效率的方法. 1.善用快捷键 快捷键是开发中必不可少的,当你善于使用快捷键的时候,十指在键盘上飞舞,那画面太美,我不敢想象. 常用快捷键操作 2.常用代码片段 开发中有一些常用的代码,可以放到代码片段中,然后下次你就可以使用快捷

iOS开发项目篇—29自定义工具条

iOS开发项目篇—29自定义工具条 一.简单说明 1.实现效果: 2.实现思路: (1)尝试: 1 //添加子控件 2 -(void)setupTextView 3 { 4 //1.创建输入控件 5 YYTextView *textView=[[YYTextView alloc]init]; 6 //设置frame 7 textView.frame=self.view.bounds; 8 [self.view addSubview:textView]; 9 self.textView=textV