You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang中使用#符号从二进制转回十进制时出错的技术问询

解决Erlang中二进制转十进制的#语法错误问题

我来帮你理清这个问题——你遇到的核心点是Erlang里B#N语法的使用场景限制,咱们一步步拆解:

问题根源:B#N是编译期字面量,不是运行时函数

Erlang中的B#N语法(比如16#F、2#1111)是编译阶段就会解析的字面量,只能在写代码时直接写死基数和数字,没办法在运行时动态拼接使用。

你之前的操作:

list_to_integer(integer_to_list(15,2))

得到的是十进制整数1111(因为把字符串"1111"当成十进制数字转成了整数),这时候你想用2#1111语法去转它,本质是试图把十进制的1111当成二进制字面量处理,这显然不符合语法规则,自然会报错。

正确的运行时转换方法:使用list_to_integer/2

Erlang标准库提供了list_to_integer/2函数,专门用来将指定基数的字符串转换为十进制整数,完全适配运行时的动态转换需求:

示例代码

% 直接把二进制字符串转十进制
list_to_integer("1111", 2). % 返回15,这正是你想要的结果

% 结合integer_to_list的完整流程
BinaryStr = integer_to_list(15, 2), % 得到"1111"
DecimalNum = list_to_integer(BinaryStr, 2), % 得到15
DecimalNum + 1. % 返回16,符合预期

验证类型

这个方法得到的结果完全符合整数校验:

is_integer(DecimalNum). % 返回true
is_number(DecimalNum). % 返回true

额外提醒

不要把integer_to_list(N, B)得到的字符串转成十进制整数再处理,那样会丢失基数信息,把二进制的"1111"变成十进制的1111,这不是二进制转十进制的正确逻辑。

内容的提问来源于stack exchange,提问作者ahron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:27