我通过以下方式转换为十六进制:
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?)。
帮助:)
答案 0 :(得分:3)
有几点意见:
通过获取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];
答案 1 :(得分:0)
每个字符是十六进制的4个字节?这意味着它实际上是四个半字节,所以它不是UTF 8而是UTF 16。