我在Windows 8.1下运行Julia 1.0.2。
下面的内容让我相信Julia以"little-endian“的方式对待我的机器:
julia> VERSION
v"1.0.2"
julia> ENDIAN_BOM
0x04030201
help?> ENDIAN_BOM
search: ENDIAN_BOM
ENDIAN_BOM
The 32-bit byte-order-mark indicates the native byte order of the host machine. Little-endian
machines will contain the value 0x04030201. Big-endian machines will contain the value
0x01020304.
基于以上,下面的位串示例对我来说是有意义的。两者的最低有效字节都在左边,正如我所期望的小端字节顺序:
julia> bitstring(1.0)
"0011111111110000000000000000000000000000000000000000000000000000"
julia> bitstring(Char(1))
"00000001000000000000000000000000"
但是,下面的示例似乎是按大端顺序排列的,最低有效字节在右侧:
julia> bitstring(1)
"0000000000000000000000000000000000000000000000000000000000000001"
我是不是很困惑?有什么建议或解释吗?
发布于 2018-12-07 07:14:52
在你的问题中有两个独立的问题。
UTF8表示在Julia中是一个自定义设计决策;方法是在右侧用0
s填充字符的Char
表示,以获得4个字节(UInt32
);您可以看到传达是如何发生的,例如在Char(u::UInt32)
方法定义中。
对于1.0
和1
,您可以使用htol
和hton
函数查看它们的低位和高位字节顺序表示,结果如下:
julia> bitstring(htol(1))
"0000000000000000000000000000000000000000000000000000000000000001"
julia> bitstring(hton(1))
"0000000100000000000000000000000000000000000000000000000000000000"
julia> bitstring(htol(1.0))
"0011111111110000000000000000000000000000000000000000000000000000"
julia> bitstring(hton(1.0))
"0000000000000000000000000000000000000000000000001111000000111111"
一切都是一致的。
编辑:查看另一个答案中的解释,bitstring
到底做了什么,因为它是相关的。
发布于 2018-12-07 07:11:40
bitstring
关心主机字节顺序。换句话说,julia> bitstring(1) "0000000000000000000000000000000000000000000000000000000000000001"
是独立于机器的,但是julia> bitstring(hton(1)) "0000000100000000000000000000000000000000000000000000000000000000"
反映了你的拱门。如果要解析数据包,请插入hton
和ntoh
。
这是因为位串最常用于使用标志的真实性检查代码,而<<
等人对主机字节顺序进行操作。
https://stackoverflow.com/questions/53656963
复制相似问题