我通过以下方式转换为十六进制:
NSString * hexStr = [NSString stringWithFormat:@"%@",
[NSData dataWithBytes:[string cStringUsingEncoding:NSUTF8StringEncoding]
length:strlen([string cStringUsingEncoding:NSUTF8StringEncoding])]];
我是从外语转换的,所以每个字符现在都是4字节(十六进制)。
我试图将其转换回nsstring,但没有得到原始字符串(由How to convert HEX to NSString in Objective-C?)。
帮帮我 :)
最佳答案
一些观察:
NSData
然后再将其用于cStringUsingEncoding
的将字符串转换为dataWithBytes
的技术有点间接。这很容易做到:NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData
转换回NSString
,则可以执行以下操作:NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
stringWithFormat
创建了NSData
的十六进制字符串表示形式。现在的问题是如何将十六进制字符串表示形式转换回NSData
。很多技巧,但这是一个执行此操作的例程:- (NSData *)dataFromHexString:(NSString *)originalHexString
{
NSString *hexString = [originalHexString stringByReplacingOccurrencesOfString:@"[ <>]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [originalHexString length])]; // strip out spaces (between every four bytes), "<" (at the start) and ">" (at the end)
NSMutableData *data = [NSMutableData dataWithCapacity:[hexString length] / 2];
for (NSInteger i = 0; i < [hexString length]; i += 2)
{
NSString *hexChar = [hexString substringWithRange: NSMakeRange(i, 2)];
int value;
sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
uint8_t byte = value;
[data appendBytes:&byte length:1];
}
return data;
}
因此,将所有这些放在一起
NSString *string = @"こんにちは、世界。";
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSString *hexString = [NSString stringWithFormat:@"%@", data];
NSData *resultingData = [self dataFromHexString:hexString];
NSString *resultingString = [[NSString alloc] initWithData:resultingData encoding:NSUTF8StringEncoding];
关于ios - 将十六进制转换为NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823478/