我正在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"
我感到困惑吗?有什么建议或解释吗?
答案 0 :(得分:3)
bitstring
关心主机字节顺序。换一种说法,
julia> bitstring(1)
"0000000000000000000000000000000000000000000000000000000000000001"
与机器无关,但是
julia> bitstring(hton(1))
"0000000100000000000000000000000000000000000000000000000000000000"
反映你的拱门。如果您解析数据包,请插入hton
和ntoh
。
这是因为位串最常用于使用标志的真实性检查代码,<<
等人按主机字节顺序进行操作。
答案 1 :(得分:2)
您的问题中有两个独立的问题。
Char
表示形式是Julia的自定义设计决策;该方法是在字符的UTF-8表示形式的右侧用0
填充以获得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
的确切含义。