【问题标题】:Convert Hex to ASCII number on Objective-c在 Objective-c 上将十六进制转换为 ASCII 数字
【发布时间】:2013-09-16 12:10:22
【问题描述】:

我有一个十六进制数

535443326663315634524877795678586b536854535530342f44526a795744716133353942704359697a6b736e446953677171555473

我想把这个数字转换成 ASCII 格式,看起来像这样

STC2fc1V4RHwyVxXkShTSU04/DRjyWDqa359BpCYizksnDiSgqqUTsYUOcHKHNMJOdqR1/TQywpD9a9xhri

我在这里看到了解决方案,但没有一个对我有用 NSString containing hex convert to ascii equivalent

我在这里检查过,但它们给出了不同的结果。任何帮助

【问题讨论】:

  • 你试过其他线程的解决方案了吗?如果是,您能在此处包含该代码吗?
  • 您似乎想要 Base64 编码。查看stackoverflow.com/questions/882277/…
  • @robbie_c 尝试了最后一个,但结果与我在branah.com/ascii-converter 得到的结果不同
  • NTM1NDQzMzI2NjYzMzE1NjM0NTI0ODc3Nzk1Njc4NTg2YjUzNjg1NDUzNTUzMDM0MmY0NDUyNmE3OTU3NDQ3MTYxMzMzNTM5NDI3MDQzNTk2OTdhNmI3MzZlNDQ2OTUzNjc3MTcxNTU1NDczN,其未来这样..它应与STC启动跨度>
  • 啊,很公平,该网站似乎只是将十六进制数字的一个字节转换为一个 ASCII 字符,给出的答案应该有效。

标签: iphone ios objective-c


【解决方案1】:

这很好用

- (NSString *)stringFromHexString:(NSString *)hexString {


    // The hex codes should all be two characters.
    if (([hexString length] % 2) != 0)
        return nil;

    NSMutableString *string = [NSMutableString string];

    for (NSInteger i = 0; i < [hexString length]; i += 2) {

        NSString *hex = [hexString substringWithRange:NSMakeRange(i, 2)];
        NSInteger decimalValue = 0;
        sscanf([hex UTF8String], "%x", &decimalValue);
        [string appendFormat:@"%c", decimalValue];
        NSLog(@"string--%@",string);
    }
    _hexString1=string;

    NSLog(@"string ---%@",_hexString1);
    return string;
}

【讨论】:

    【解决方案2】:

    如果您以 NSData * 开头,您可以通过这种方式获取 ASCII 字符串:

    NSData *someData = [NSData dataWithHexString:@"ABC123"];
    
    NSString *asciiString = [[NSString alloc] initWithData: someData encoding:NSASCIIStringEncoding];
    

    【讨论】:

    • 这不是开箱即用的,因为 dataWithHexString 不是 Foundation 提供的函数。您需要添加来自NSData+HexString.mopensource.apple.com/source/Security/Security-55471/…)的代码
    • 好的,好点。顺便说一句,为什么链接有评论// Not efficent
    • 可能是因为使用了strtol()等子例程以及源字符串的索引方式。可以将输入作为原始字符数组访问,这可能更快,并通过表格或一些比较、添加和移位来转换半字节。但它对于大多数用途来说已经足够快了,因为您可能不会每秒转换数百万个。
    猜你喜欢
    • 2013-12-22
    • 2016-06-27
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多