【发布时间】:2023-03-19 15:56:01
【问题描述】:
下面是我的 Hex 到 ASCII 转换方法
-(NSString*)getASCIIString:(NSString*)strHex
{
NSMutableString *strAscii = [NSMutableString string];
for (int i=0;i<24;i+=2) {
NSString *charValue = [strHex substringWithRange:NSMakeRange(i,2)];
unsigned int _byte;
[[NSScanner scannerWithString:charValue] scanHexInt: &_byte];
if (_byte >= 32 && _byte < 127) {
[strAscii appendFormat:@"%c", _byte];
} else {
[strAscii appendFormat:@"[%d]", _byte];
}
}
NSLog(@"Hex: %@", strHex);
NSLog(@"Ascii: %@", strAscii);
return strAscii;
}
上述方法将十六进制字符串转换为 ASCII,但我注意到一种情况给我错误的结果如下:
strHex:4E4932313533000000000066 ASCII:NI2153[0][0][0][0][0]f(错误)
为什么 00 我得到 [0]。 ?
我的方法工作得很好,只有当我提到的十六进制字符串中有 00 时,我在 Ascii 字符串中得到 [0]。
请告诉我经过测试的完美转换方法。
【问题讨论】:
-
也许this 是你要找的?
-
不,我的方法工作得很好,只有当我提到的十六进制字符串中有 00 时,我在 Ascii 字符串中得到 [0]。它不应该是....
-
根据您的代码,输出是正确的,因为零字节(十六进制
0x0)是不可打印字符,不在 32 .. 127 范围内。不要将其与 字母 0,即十六进制0x30
标签: ios objective-c