erlang:split_binary(Bin, N)的BUG

本文探讨了Erlang中split_binary函数的行为特性及其潜在限制,包括当参数N小于5或处理的数据超过128M时可能出现的问题,并分析了特定二进制字符串的生成原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OS运行平台:

 

root@x61-laptop:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.10
DISTRIB_CODENAME=intrepid
DISTRIB_DESCRIPTION="Ubuntu 8.10"



 

 

ERLANG版本:

 

root@x61-laptop:~# cat /usr/lib/erlang/releases/RELEASES
[{release,"OTP  APN 181 01","R12B","5.6.3",
          [{kernel,"2.12.3","/usr/lib/erlang/lib/kernel-2.12.3"},
           {stdlib,"1.15.3","/usr/lib/erlang/lib/stdlib-1.15.3"},
           {sasl,"2.1.5.3","/usr/lib/erlang/lib/sasl-2.1.5.3"}],
          permanent}].


 

 

操作过程:


Eshell V5.6.3  (abort with ^G)
1> CaptureFile = <<212,195,178,161,2,0,4,0,0,0,0,0,0,0,0,0,96>>.
<<212,195,178,161,2,0,4,0,0,0,0,0,0,0,0,0,96>>

2> A = split_binary(CaptureFile, 1).
{<<"\324"
>>,<<195,178,161,2,0,4,0,0,0,0,0,0,0,0,0,96>>}

3> B = split_binary(CaptureFile, 3).
{<<"\324\303\262"
>>,<<161,2,0,4,0,0,0,0,0,0,0,0,0,96>>}

4> C = split_binary(CaptureFile, 4). 
{<<"\324\303\262\241"
>>,<<2,0,4,0,0,0,0,0,0,0,0,0,96>>}

5> D = split_binary(CaptureFile, 5).
{<<212,195,178,161,2>>,<<0,4,0,0,0,0,0,0,0,0,0,96>>}

6> E = split_binary(CaptureFile, 6).
{<<212,195,178,161,2,0>>,<<4,0,0,0,0,0,0,0,0,0,96>>}

7> 




 

 

这说明split_binary(Bin, N)函数的N如果小于5,则会出错误。

如果Bin超过128M也会出错。

 

 

还有<<"\324\303\262\241">> 是怎么产生的?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值