gpt4 book ai didi

swift - 如何将我的字节数据转换为十六进制字符串,然后转换为有符号整数(32 位)二进制补码..?

转载 作者:行者123 更新时间:2023-11-30 11:37:56 27 4
gpt4 key购买 nike

我有如下数据:

let data = Data(bytes: [206, 66, 49, 62])

然后我使用此扩展(来自 How to convert Data to hex string in swift )转换为十六进制字符串:

extension Data {
struct HexEncodingOptions: OptionSet {
let rawValue: Int
static let upperCase = HexEncodingOptions(rawValue: 1 << 0)
}

func hexEncodedString(options: HexEncodingOptions = []) -> String {
let hexDigits = Array((options.contains(.upperCase) ? "0123456789ABCDEF" : "0123456789abcdef").utf16)
var chars: [unichar] = []
chars.reserveCapacity(2 * count)
for byte in self {
chars.append(hexDigits[Int(byte / 16)])
chars.append(hexDigits[Int(byte % 16)])
}

return String(utf16CodeUnits: chars, count: chars.count)
}
}

然后它给出“ce42313e”作为十六进制字符串。现在我试图将其转换为有符号整数(32 位)二进制补码。我尝试了几种方法,但没有找到完美的东西。

当我在下面的链接中以十六进制十进制给出“ce42313e”时,该值为-834522818

http://www.binaryconvert.com/convert_signed_int.html

下面是我尝试将“ce42313e”转换为 int 的其中之一,它给了我 3460444478 ..而不是 -834522818 。

let str = value
let number = Int(str, radix: 16)

请帮助获取该值。

最佳答案

Int(str, radix: 16) 将字符串解释为十六进制无符号数字的表示。你可以将其转换为Int32

let data = Data(bytes: [206, 66, 49, 62])
let str = data.hexEncodedString()
print(str) // ce42313e

let number = Int32(truncatingBitPattern: Int(str, radix: 16)!)
print(number) // -834522818

但实际上您不需要为此目的使用十六进制表示。您的数据是有符号 32 位整数的大端表示,这是直接从数据中获取数字的方法:

let data = Data(bytes: [206, 66, 49, 62])
let number = Int32(bigEndian: data.withUnsafeBytes { $0.pointee })
print(number) // -834522818

关于swift - 如何将我的字节数据转换为十六进制字符串,然后转换为有符号整数(32 位)二进制补码..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com