【发布时间】:2013-03-18 02:46:51
【问题描述】:
过去一天左右,我一直在无缘无故地使用 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。我不明白为什么标准库会在十六进制数上附加一个负号,而且我无法在文档中找到任何关于它的内容。我找了很多其他地方,但似乎也找不到有同样问题的人。
我希望这只是我的一个简单修复。
【问题讨论】: