在 Erlang 中如何获取二进制字节长度?

发布于 2024-11-02 00:22:54 字数 135 浏览 3 评论 0原文

如果我有以下二进制文件:

<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>

我如何知道它的长度?

If I have the following binary:

<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>

How can I know what length it has?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初吻给了烟 2024-11-09 00:22:54

对于字节大小:

1> byte_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
16

对于位大小:

2> bit_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
128

当您有一个位字符串(位长度不能被字节大小 8 整除的二进制文件)时,byte_size/1 将向上舍入到最接近的整个字节。即位串适合的字节数:

3> bit_size(<<0:19>>).
19

4> byte_size(<<0:19>>). % 19 bits fits inside 3 bytes
3

5> bit_size(<<0:24>>).
24

6> byte_size(<<0:24>>). % 24 bits is exactly 3 bytes
3

7> byte_size(<<0:25>>). % 25 bits only fits inside 4 bytes
4

以下示例说明了从 8 位(适合 1 个字节)到 17 位(需要 3 个字节才能适合)的大小差异:

8> [{bit_size(<<0:N>>), byte_size(<<0:N>>)} || N <- lists:seq(8,17)].
[{8,1},
 {9,2},
 {10,2},
 {11,2},
 {12,2},
 {13,2},
 {14,2},
 {15,2},
 {16,2},
 {17,3}]

For byte size:

1> byte_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
16

For bit size:

2> bit_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
128

When you have a bit string (a binary with bit length not divisible by the byte size 8) byte_size/1 will round up to the nearest whole byte. I.e. the amount of bytes the bit string would fit in:

3> bit_size(<<0:19>>).
19

4> byte_size(<<0:19>>). % 19 bits fits inside 3 bytes
3

5> bit_size(<<0:24>>).
24

6> byte_size(<<0:24>>). % 24 bits is exactly 3 bytes
3

7> byte_size(<<0:25>>). % 25 bits only fits inside 4 bytes
4

Here's an example illustrating the difference in sizes going from 8 bits (fits in 1 byte) to 17 bits (needs 3 bytes to fit):

8> [{bit_size(<<0:N>>), byte_size(<<0:N>>)} || N <- lists:seq(8,17)].
[{8,1},
 {9,2},
 {10,2},
 {11,2},
 {12,2},
 {13,2},
 {14,2},
 {15,2},
 {16,2},
 {17,3}]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文