Julia位串函数与字节顺序
我正在Windows8.1下运行Julia 1.0.2 以下内容让我相信Julia以“little endian”的方式对待我的机器: 基于以上,下面的位字符串示例对我来说很有意义。两者都有最低有效字节,在左边,正如我所期望的小尾端字节顺序:Julia位串函数与字节顺序,julia,Julia,我正在Windows8.1下运行Julia 1.0.2 以下内容让我相信Julia以“little endian”的方式对待我的机器: 基于以上,下面的位字符串示例对我来说很有意义。两者都有最低有效字节,在左边,正如我所期望的小尾端字节顺序: julia> bitstring(1.0) "0011111111110000000000000000000000000000000000000000000000000000" julia> bitstring(Char(1)) "00000
julia> bitstring(1.0)
"0011111111110000000000000000000000000000000000000000000000000000"
julia> bitstring(Char(1))
"00000001000000000000000000000000"
但是,以下示例似乎是按大端顺序排列的,最低有效字节位于右侧:
julia> bitstring(1)
"0000000000000000000000000000000000000000000000000000000000000001"
我糊涂了吗?有什么建议或解释吗?
位字符串
关心主机字节顺序。换句话说,,
julia>位字符串(1)
"0000000000000000000000000000000000000000000000000000000000000001"
是机器独立的,但是
julia>位字符串(hton(1))
"0000000100000000000000000000000000000000000000000000000000000000"
反射你的拱门。如果解析数据包,请插入hton
和ntoh
这是因为比特串最常用于使用标志的真实性检查代码,而在您的问题中有两个不同的问题
Char
表示是Julia中的定制设计决策;该方法是,字符的UTF-8表示形式在右侧填充0
s以获得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"
一切都是一致的
编辑:请参阅另一个答案中的解释,了解
位字符串的相关功能。答案不错。另一种解释位字符串
功能的方法是,它写出一个二进制表示法,就像人写它一样,例如,在一张纸上用0
填充一个数字。感谢你们两位的帮助!感谢您指出hton()和htol()。这两个回答非常有用!
julia> bitstring(htol(1))
"0000000000000000000000000000000000000000000000000000000000000001"
julia> bitstring(hton(1))
"0000000100000000000000000000000000000000000000000000000000000000"
julia> bitstring(htol(1.0))
"0011111111110000000000000000000000000000000000000000000000000000"
julia> bitstring(hton(1.0))
"0000000000000000000000000000000000000000000000001111000000111111"