如何在Elixir中将二进制字符串转换为bitstring?
二进制字符串转Bitstring的实现方法
在Elixir里,要把类似 "0110" 这样的二进制字符串转换成对应值的bitstring,直接用Base模块不行(它仅处理RFC4648定义的编码类型,不支持Base2这类转换),可以用以下两种简洁方式实现:
方法一:逐字符转换后打包
先把字符串拆成单个字符,转成整数列表,再通过位语法打包成对应长度的bitstring:
def bin_str_to_bitstring(bin_str) do bin_str |> String.graphemes() |> Enum.map(&String.to_integer/1) |> then(&<<&1::bitstring-size(Enum.count(&1))>>) end # 调用示例 bin_str_to_bitstring("0110") # 返回 <<6::size(4)>>
方法二:先转整数再指定位数
先把二进制字符串转成十进制整数,再通过位语法指定和原字符串长度一致的位数,避免前导零丢失:
def bin_str_to_bitstring(bin_str) do length = String.length(bin_str) bin_str |> String.to_integer(2) |> then(&<<&1::size(length)>>) end # 调用示例 bin_str_to_bitstring("0110") # 返回 <<6::size(4)>>
注意:如果直接用 <<String.to_integer("0110", 2)::bits>>,会得到 <<6::size(3)>>(因为6的二进制是110,仅3位),所以必须显式指定size参数匹配原字符串的位数,才能保留前导零对应的位。
内容的提问来源于stack exchange,提问作者Adam Millerchip
相关产品推荐
相关产品推荐

