如何将NSString转换为十六进制值

时间:2016-03-11 07:18:06

标签: ios objective-c

我的NSString值为,

NSString *str_Value = @"12345FTY642493AF3556K7880D46676F9";

我需要以下格式输出

Byte byte_Value[]={0x12,0x34,0x5F,0xF9,0x64,0x24,0x93,0xAF,0x35,0x56,0xA7,0x88,0x0D,0x46,0x67,0x6F};

如何将NSSTring值转换为Byte [],任何人都可以为此建议解决方案。

3 个答案:

答案 0 :(得分:0)

  

如何将NSString值转换为Byte[]。任何人都可以为此建议解决方案。

目前还不清楚你在问什么。以上建议您只需要Byte[]类型的,它与C中的Byte *相同,同时您还将所需的输出显示为(Objective) - )C代码用数组文字初始化数组。

如果是前者那么你可以:

  • 使用UTF8StringNSString获取C样式字符串。此方法返回char *
  • C函数strlen将告诉您此C字符串包含许多字符(字节)。

  • 您可以将char *值转换为Byte *值 - 它们都是指向字节的指针。

  • 这将为您提供字节数和指向它们的Byte *指针。您应该复制这些字节,UTF8String返回的值不引用调用者拥有的内存,它将被系统销毁/重用。您可以使用memcpymalloc等功能执行此操作。

如果是后者,你想要一个包含C样式声明表示的字符串,那么你可以:

  • 使用UTF8StringNSString获取C样式字符串。此方法返回char *
  • C函数strlen将告诉您此C字符串包含许多字符(字节)。
  • 现在一次处理C字符串(char)(使用循环),并将每个字符格式化为十六进制,并将结果追加到您正在构建的NSMutableString向上所需的字符串。您可以使用appendFormat:方法执行此操作,格式%02x将生成char值的零填充2位十六进制表示。

如果您在编写一些代码后遇到困难,请提出一个新问题,包括您编写的代码,并解释您遇到的问题。有人可能会帮助你。

HTH

答案 1 :(得分:-1)

试试这个可以帮助你的示例代码

NSString * str = @"Hello World";

    NSString * hexStr = [NSString stringWithFormat:@"%@",
                         [NSData dataWithBytes:[str cStringUsingEncoding:NSUTF8StringEncoding] 
                                        length:strlen([str cStringUsingEncoding:NSUTF8StringEncoding])]];

    for(NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil]) 
        hexStr = [hexStr stringByReplacingOccurrencesOfString:toRemove withString:@""];

    NSLog(@"%@", hexStr);

应该提供类似

的输出
48656c6c6f20576f726c64

答案 2 :(得分:-2)

在Swift中你可以创建一个扩展名。

extension NSData {

    func toHexString() -> String {

        var hexString: String = ""
        let dataBytes =  UnsafePointer<CUnsignedChar>(self.bytes)

        for (var i: Int=0; i<self.length; ++i) {
            hexString +=  String(format: "%02X", dataBytes[i])
        }

        return hexString
    }
}
Then you can simply use:

let keyData: NSData = NSData(bytes: [0x00, 0xFF], length: 2)

let hexString = keyData.toHexString()
println("\(hexString)") // Outputs 00FF