首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将十六进制转换为NSString

将十六进制转换为NSString
EN

Stack Overflow用户
提问于 2013-12-29 16:35:58
回答 2查看 3K关注 0票数 1

我通过以下方式转换为十六进制:

代码语言:javascript
复制
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?)。

帮助:)

EN

回答 2

Stack Overflow用户

发布于 2013-12-29 21:26:37

以下是一些观察结果:

  1. 您通过获取cStringUsingEncoding将字符串转换为NSData,然后将其用于dataWithBytes的技术有点间接。这样做要容易得多:

NSData * NSData = string dataUsingEncoding:NSUTF8StringEncoding;

  • If要将数据转换回NSString,可以执行以下操作:

NSString * encoding:NSUTF8StringEncoding];

  • You're = [NSString alloc initWithData:data encoding:NSUTF8StringEncoding];

  • You‘re成功地使用stringWithFormat创建了NSData的十六进制字符串表示。现在的问题是如何将十六进制字符串表示形式转换回NSData。有很多技术,但这里有一个例程可以执行that:

  • (NSData *)dataFromHexString:(NSString *)originalHexString { NSString * originalHexString = [originalHexString stringByReplacingOccurrencesOfString:@“<>”withString:@"“options:NSRegularExpressionSearch range:NSMakeRange(0,originalHexString length)];//去掉空格(每四个字节之间),"<”(在开头)和">“(在结尾) NSMutableData *data = [NSMutableData dataWithCapacity:hexString length / 2];对于(NSInteger i= 0;i< hexString length;I += 2) { NSString * hexString data =hexString substringWithRange: NSMakeRange(i,2);int值;sscanf(hexChar cStringUsingEncoding:NSASCIIStringEncoding,"%x",&value);uint8_t字节=值;数据追加字节:&字节长度:1;}返回数据;}

所以,把所有这些放在一起,

代码语言:javascript
复制
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];
票数 3
EN

Stack Overflow用户

发布于 2013-12-29 17:54:32

每个字符是4个字节的十六进制?这意味着它实际上是四个半字节,所以它不是UTF 8而是UTF 16。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20823478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档