在组装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
版权声明:本文为博主原创文章,未经博主允许不得转载。