gpt4 book ai didi

hex - 在 Go 中将 strconv 用于负十六进制值

转载 作者:IT王子 更新时间:2023-10-29 02:30:31 26 4
gpt4 key购买 nike

过去一天左右,我无缘无故地使用 Go 构建了一个汇编程序,以便熟悉这门语言。这是我使用 Go 的第一个真正的程序,所以我预料到会出现问题,但我一次又一次地遇到一个一致的错误。在其他情况下,我只是想出了其他的 hacky 方法来修复它,但这次我想我需要一个答案,所以我觉得我实际上做对了。

基本上,我必须解析大量的字节值。其中一些是有符号字节,因此 -1 = 0xFF 等等。在计算标签的地址时,我需要找到它与当前地址的偏移量。以下代码是我用来获取偏移量的精简基本版本:

//  lbladdr holds the target label address
// address holds current address in memory
// label[x] holds the offset
if address > lbladdr {
lbladdr -= address
}
label[x] = strconv.FormatInt(int64(lbladdr), 16)

这适用于正值,但是当我得到一个负地址(地址 > lbladdr)时,我得到的不是像 FE 这样的值,而是 -2。我不明白为什么标准库会在十六进制数后附加一个负号,而且我在文档中也找不到任何相关信息。我看了很多其他地方,但我似乎也找不到有同样问题的人。

我希望这只是我这边的一个简单修复。

最佳答案

在十六进制数上使用负号是完全合理的。我知道在使用汇编时,通常使用您以十六进制表示的寄存器的实际位模式来表示符号。然而 Go 并不知道你在这么做。 Go 的格式化函数也没有像在 CPU 寄存器中那样支持十六进制值。此外,位模式将根据寄存器大小而有所不同(16 对 32 对 64 以及大端与小端)。你会把它们存储在里面。所以基地不足以按照你想要的方式打印它们。您将需要编写自己的格式库,以支持您要表示的寄存器类型的格式。

关于hex - 在 Go 中将 strconv 用于负十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469015/

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