xcode Swift3 将字符串值转换为十六进制字符串

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40605484/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 09:35:37  来源:igfitidea点击:

Swift3 convert string value to hexadecimal string

iosxcodeswift3

提问by Usman Javed

I am new to Swift and I want to convert a string into hexadecimal string. I have found a Objective-Cfunction to a string into hexadecimal.

我是 Swift 的新手,我想将字符串转换为十六进制字符串。我找到了一个Objective-C函数把一个字符串转成十六进制。

NSString * str = @"Say Hello to My Little Friend";

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

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

NSLog(@"hexStr:%@", hexString);

Now I am unable to convert this function in Swift. Currently I am using Swift3.

现在我无法在 Swift 中转换这个函数。目前我正在使用 Swift3。

Please someone can do this for me?

请问有人可以为我做这个吗?

回答by vadian

This produces the same output as the ObjC version

这产生与 ObjC 版本相同的输出

let str = "Say Hello to My Little Friend"
let data = Data(str.utf8)
let hexString = data.map{ String(format:"%02x", 
extension String {
    func toHexEncodedString(uppercase: Bool = true, prefix: String = "", separator: String = "") -> String {
        return unicodeScalars.map { prefix + .init(
let str = "Hello, playground"
print(str.toHexEncodedString())                                                 // 48656C6C6F2C20706C617967726F756E64
print(str.toHexEncodedString(uppercase: false, prefix: "0x", separator: " "))   // 0x48 0x65 0x6c 0x6c 0x6f 0x2c 0x20 0x70 0x6c 0x61 0x79 0x67 0x72 0x6f 0x75 0x6e 0x64
.value, radix: 16, uppercase: uppercase) } .joined(separator: separator) } }
) }.joined()

回答by Vasily Bodnarchuk

Details

细节

  • Xcode 11.2.1 (11B500), Swift 5.1
  • Xcode 11.2.1 (11B500),Swift 5.1

Solution

解决方案

let myString = "ABCDEF"
let data = myString.dataUsingEncoding(NSUTF8StringEncoding)

Usage

用法

func hexFromData(data:NSData) -> String {
    let p = UnsafePointer<UInt8>(data.bytes)
    let len = data.length
    var str: String = String()
    for i in 0...len-1 {
        str += String(format: "%02.2X", p[i])
    }
    return str
}

回答by cheeseRoot

Convert your string to NSData like this.

像这样将您的字符串转换为 NSData。

let string = "Say Hello to My Little Friend"
let data = string.dataUsingEncoding(NSUTF8StringEncoding)
print(data)

Then convert the NSData to hexadecimal string using following method -

然后使用以下方法将 NSData 转换为十六进制字符串 -

  Optional(<53617920 48656c6c 6f20746f 204d7920 4c697474 6c652046 7269656e 64>)

Hope this helped.

希望这有帮助。

回答by arunprasath sivasamy

Please try this,

请试试这个,

let string = "Hello World!"
let data = string.data(using: String.Encoding.utf8)

let hexString = data?.hex


extension Data {

var hex: String {
        var string = ""

        #if swift(>=3.1)
            enumerateBytes { pointer, index, _ in
                for i in index..<pointer.count {
                    string += String(format: "%02x", pointer[i])
                }
            }
        #else
            enumerateBytes { pointer, count, _ in
                for i in 0..<count {
                    string += String(format: "%02x", pointer[i])
                }
            }
        #endif

        return string
    }


}

and its output is:

它的输出是:

##代码##

回答by Rakesh Gujari

Swift 3

斯威夫特 3

##代码##