PythonにはSwiftで苦労している非常に便利なライブラリメソッド(binascii.a2b_hex(keyStr)とbinascii.hexlify(keyBytes))があります。 Swiftですぐに利用できるものはありますか?そうでない場合は、どのように実装しますか?すべての境界と他のチェック(偶数の長さのキーのような)が行われていることを考えると、Swiftの16進数/ 2進数の文字列変換
2
A
答えて
0
Pythonと数字を変換するとき、それは実行のチェックには本当に慣れていない、しかし、あなたは以下の機能を拡張することができます
func convert(_ str: String, fromRadix r1: Int, toRadix r2: Int) -> String? {
if let num = Int(str, radix: r1) {
return String(num, radix: r2)
} else {
return nil
}
}
convert("11111111", fromRadix: 2, toRadix: 16)
convert("ff", fromRadix: 16, toRadix: 2)
0
をスウィフト2
extension NSData {
class func dataFromHexString(hex: String) -> NSData? {
let regex = try! NSRegularExpression(pattern: "^[0-9a-zA-Z]*$", options: .CaseInsensitive)
let validate = regex.firstMatchInString(hex, options: NSMatchingOptions.init(rawValue: 0), range: NSRange(location: 0, length: hex.characters.count))
if validate == nil || hex.characters.count % 2 != 0 {
return nil
}
let data = NSMutableData()
for i in 0..<hex.characters.count/2 {
let hexStr = hex.substring(i * 2, length: 2)
var ch: UInt32 = 0
NSScanner(string: hexStr).scanHexInt(&ch)
data.appendBytes(&ch, length: 1)
}
return data
}
}
let a = 0xabcd1234
print(String(format: "%x", a)) // Hex to String
NSData.dataFromHexString("abcd1234") // String to hex
8
Data
スウィフト3から「何を持っていません組み込み "メソッドを使用して内容を 16進文字列として出力するか、16進文字列からData
値を作成します。
「データから16進文字列への方法」のメソッドは、たとえば次のとおりです。 How to convert Data to hex string in swiftまたはHow to print the content of a variable type Data using swift?またはconverting string to data in swift 3.0である。ここで第一のリンクからインプリメンテーションである:ここで
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%02hhx", $0) }.joined()
}
}
は(スウィフト3および改善に翻訳コードレビューにHex String to Bytes (NSData)から採取した、) 変換「データへの16進文字列」逆の可能な実装である としてfailable inititializer:
extension Data {
init?(fromHexEncodedString string: String) {
// Convert 0 ... 9, a ... f, A ...F to their decimal value,
// return nil for all other input characters
func decodeNibble(u: UInt16) -> UInt8? {
switch(u) {
case 0x30 ... 0x39:
return UInt8(u - 0x30)
case 0x41 ... 0x46:
return UInt8(u - 0x41 + 10)
case 0x61 ... 0x66:
return UInt8(u - 0x61 + 10)
default:
return nil
}
}
self.init(capacity: string.utf16.count/2)
var even = true
var byte: UInt8 = 0
for c in string.utf16 {
guard let val = decodeNibble(u: c) else { return nil }
if even {
byte = val << 4
} else {
byte += val
self.append(byte)
}
even = !even
}
guard even else { return nil }
}
}
例:これらの答え@anonymous
// Hex string to Data:
if let data = Data(fromHexEncodedString: "0002468A13579BFF") {
let idata = Data(data.map { 255 - $0 })
// Data to hex string:
print(idata.hexEncodedString()) // fffdb975eca86400
} else {
print("invalid hex string")
}
+1
これは1,000,000ポイントに値する。スーパークリーンで便利。共有ありがとう! – dustinrwh
関連する問題
- 1. 文字列を16進数で16進数に変換する
- 2. 10進数から16進数への文字列の変換
- 3. 16進文字列から16進文字列への変換
- 4. Swift:文字列を16進数のカラーコードに変換する
- 5. 16進数の文字列を16進数のデータに変換する
- 6. 文字列を16進数と16進数に変換する方法は?
- 7. 16進文字列を10進数に変換する
- 8. 文字列16進数、vb.net
- 9. Oracleの16進文字列の変換
- 10. EZGPIB:16進文字列を16進数に変換する(Delphi Scripted Pascal)
- 11. Pythonで長い16進文字列を16進数に変換します
- 12. 文字列を16進数に変換する16 pythonで3
- 13. 16進数を2進数のiphoneに変換するには
- 14. 10進数から2進数への変換(16ビット)
- 15. 16進数の文字列への変換
- 16. 10進数への16進数の文字列
- 17. 文字列の16進値を16進数値のASCII文字に変換する
- 18. 16進数の文字列をPythonに変換する
- 19. arduinoプラットフォームの文字列を16進数に変換する
- 20. 16進数の文字列をQByteArrayに変換する
- 21. 16進数の文字列をbase64に変換する
- 22. 16進数の1バイトを文字列に変換する
- 23. 文字列を16進数に変換し、その逆を
- 24. 16進数の文字列をバイト[]に変換するには
- 25. JavaのUnicodeの16進数文字列
- 26. 16進数の文字列Pythonのチェックサム
- 27. 16進数の文字で表現された16進数
- 28. ビットボード:16進数から16進数への変換
- 29. 混乱C++で16進数を2進数に変換する
- 30. javascript文字列に16進数のエスケープ
は大きな数字には適用されません。私は32桁の16進数について話しています。効率的な方法は、このような大きな文字列を持ち、入力をバイト配列に変換することです。 Swift stdlibにはBigIntegerとstdlibでのこれらの種類の変換は今のところありません。 – johndoe