在组装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
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lc_obj/article/details/46940475