Julia位串函数与字节顺序

Julia位串函数与字节顺序,julia,Julia,我正在Windows8.1下运行Julia 1.0.2 以下内容让我相信Julia以“little endian”的方式对待我的机器: 基于以上,下面的位字符串示例对我来说很有意义。两者都有最低有效字节,在左边,正如我所期望的小尾端字节顺序: julia> bitstring(1.0) "0011111111110000000000000000000000000000000000000000000000000000" julia> bitstring(Char(1)) "00000

我正在Windows8.1下运行Julia 1.0.2

以下内容让我相信Julia以“little endian”的方式对待我的机器:

基于以上,下面的位字符串示例对我来说很有意义。两者都有最低有效字节,在左边,正如我所期望的小尾端字节顺序:

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"