下面是我的十六进制到 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,但我注意到一种情况给了我错误的结果,如下所示:
十六进制:4E4932313533000000000066 Ascii : NI2153[0][0][0][0][0]f(错误)
为什么 00 我得到 [0]。 ?
我的方法工作得很好,只有当十六进制字符串中有 00 时,正如我提到的,我在 Ascii 字符串中得到 [0] 。
请告诉我经过测试的完美转换方法。
最佳答案
如果十六进制字符串是00
,你在_byte
中得到值0
,因此你在else分支,得到[0]
作为 [strAscii appendFormat:@"[%d]", _byte] 的结果;
。
关于ios - 将十六进制字符串转换为 ASCII 字符串显示 00 的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45477573/