为什么这两个golang整数转换函数给出不同的结果?

mdwhatcott

我编写了一个将字节片转换为整数的函数。

我创建的函数实际上是Rob Pike在此处发布的内容的基于循环的实现:

http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html

这是Rob的代码:

i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);

我的第一个实现(操场上的toInt2)没有按我预期的那样工作,因为它似乎将int值初始化为uint。这看起来确实很奇怪,但是它必须特定于平台,因为去游乐场报告的结果与我的机器(Mac)不同。

谁能解释为什么这些功能在我的Mac上表现不同?

这是带有代码的游乐场链接:http : //play.golang.org/p/FObvS3W4UD

这是操场上的代码(为方便起见):

/*

Output on my machine:

    amd64 darwin go1.3 input: [255 255 255 255]
    -1
    4294967295

Output on the go playground:

    amd64p32 nacl go1.3 input: [255 255 255 255]
    -1
    -1

*/

package main

import (
    "fmt"
    "runtime"
)

func main() {
    input := []byte{255, 255, 255, 255}
    fmt.Println(runtime.GOARCH, runtime.GOOS, runtime.Version(), "input:", input)
    fmt.Println(toInt(input))
    fmt.Println(toInt2(input))
}

func toInt(bytes []byte) int {
    var value int32 = 0 // initialized with int32

    for i, b := range bytes {
        value |= int32(b) << uint(i*8)
    }
    return int(value) // converted to int
}

func toInt2(bytes []byte) int {
    var value int = 0 // initialized with plain old int

    for i, b := range bytes {
        value |= int(b) << uint(i*8)
    }
    return value
}
一对一

这是一个有根据的猜测,但是int根据平台的不同类型可以是64位或32位,在我的系统上是64位,因为操场在nacl上运行,所以是32位。

如果您将第二个函数更改为在各处都使用uint,它将可以正常工作。

规格

uint     either 32 or 64 bits 
int      same size as uint
uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这两个函数的结果不同?

来自分类Dev

Java-为什么这两个为计算k ^ 2 + 1形式的素数给出不同的输出?

来自分类Dev

为什么这两个代码给出的结果相同?

来自分类Dev

为什么这两个“自动装箱”语句给出不同的结果?

来自分类Dev

为什么这两个代码段给出不同的结果

来自分类Dev

为什么这两个C#脚本给出不同的结果?

来自分类Dev

为什么这两个find命令给出不同的结果?

来自分类Dev

为什么这两个日期命令给出不同的结果?

来自分类Dev

为什么这两个代码给出不同的输出

来自分类Dev

为什么这两个版本的高阶函数没有给出相同的结果?

来自分类Dev

为什么这两个“ cat”命令的结果不同?

来自分类Dev

为什么这两个python函数返回不同的结果?

来自分类Dev

这两个行转换函数有什么不同?

来自分类Dev

为什么这两个DOMDocument函数的行为不同?

来自分类Dev

为什么这两个模板函数的输出不同?

来自分类Dev

为什么两个sql给出不同的结果?

来自分类Dev

这两个SQL查询在什么条件下会给出不同的结果?

来自分类Dev

这两个SQL查询在什么条件下会给出不同的结果?

来自分类Dev

R:为什么对于相同的点,来自两个不同软件的这两个不同的结果(拟合曲线)?

来自分类Dev

xUnit.net:为什么这两个等效测试会有不同的结果?

来自分类Dev

为什么这两个python正则表达式产生不同的结果?

来自分类Dev

du -sh:我不明白为什么这两个结果不同

来自分类Dev

xUnit.net:为什么这两个等效测试会有不同的结果?

来自分类Dev

是什么让这两个查询返回不同的结果?

来自分类Dev

这两个结果有什么不同?

来自分类Dev

JavaScript日期:为什么这两个日期不同?

来自分类Dev

为什么这两个FParsec片段不同?

来自分类Dev

为什么这两个警报显示不同的值?

来自分类Dev

为什么这两个 DateTime 实例不同?

Related 相关文章

  1. 1

    为什么这两个函数的结果不同?

  2. 2

    Java-为什么这两个为计算k ^ 2 + 1形式的素数给出不同的输出?

  3. 3

    为什么这两个代码给出的结果相同?

  4. 4

    为什么这两个“自动装箱”语句给出不同的结果?

  5. 5

    为什么这两个代码段给出不同的结果

  6. 6

    为什么这两个C#脚本给出不同的结果?

  7. 7

    为什么这两个find命令给出不同的结果?

  8. 8

    为什么这两个日期命令给出不同的结果?

  9. 9

    为什么这两个代码给出不同的输出

  10. 10

    为什么这两个版本的高阶函数没有给出相同的结果?

  11. 11

    为什么这两个“ cat”命令的结果不同?

  12. 12

    为什么这两个python函数返回不同的结果?

  13. 13

    这两个行转换函数有什么不同?

  14. 14

    为什么这两个DOMDocument函数的行为不同?

  15. 15

    为什么这两个模板函数的输出不同?

  16. 16

    为什么两个sql给出不同的结果?

  17. 17

    这两个SQL查询在什么条件下会给出不同的结果?

  18. 18

    这两个SQL查询在什么条件下会给出不同的结果?

  19. 19

    R:为什么对于相同的点,来自两个不同软件的这两个不同的结果(拟合曲线)?

  20. 20

    xUnit.net:为什么这两个等效测试会有不同的结果?

  21. 21

    为什么这两个python正则表达式产生不同的结果?

  22. 22

    du -sh:我不明白为什么这两个结果不同

  23. 23

    xUnit.net:为什么这两个等效测试会有不同的结果?

  24. 24

    是什么让这两个查询返回不同的结果?

  25. 25

    这两个结果有什么不同?

  26. 26

    JavaScript日期:为什么这两个日期不同?

  27. 27

    为什么这两个FParsec片段不同?

  28. 28

    为什么这两个警报显示不同的值?

  29. 29

    为什么这两个 DateTime 实例不同?

热门标签

归档