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
Swift3 convert string value to hexadecimal string
提问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