如果我想将二进制转换为十进制,我是否可以这样做:
假设:
newState[i-2] = 0,
newState[i-1] = 0,
newState[i] = 1
binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.
我想这样做,所以我可以将二进制文件传递给另一个方法转换为十进制。
答案 0 :(得分:1)
你可以使用bit twiddling(假设newState[N]
为0或1):
binary = (newState[i-2] << 2) |
(newState[i-1] << 1) |
(newState[i]);
答案 1 :(得分:1)
你的问题有点不清楚。你究竟拥有什么?你有一个数组,其元素包含你的值的各个位吗?然后你需要从那些位中组合实际值,比如
bit[0] = 0;
bit[1] = 0;
bit[2] = 1;
unsigned int value = (bit[0]) | (bit[1]<<1) | (bit[2]<<2);
或者您是否有想要显示为二进制的值?然后,您需要通过提取单个位并显示适当的字符,将值从值转换为二进制表示。遗憾的是,没有二进制表示修饰符可用于使用格式字符串的标准函数(因为%x
是十六进制字符串)。
或者您是否以二进制格式表示值的字符串表示?在这种情况下,您可能需要查看strtoul,它可以将值的字符串表示形式转换为数字基数范围的值,包括基数2.
通常,C中的数字不具有二进制,十六进制或任何格式。数字是一个数字,它所拥有的唯一格式(除了在真实机器上的表示)只是它的长度,无论是有符号还是无符号(我在这里留下浮点数)。 “二进制”,“十六进制”,“十进制”等仅是读者 - 即人类 - 具有相同值的表示。无论表示如何,机器上的值都完全相同。
binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.
这是一个使用comma operator的表达式。您无法连接C中的值或字符串。
答案 2 :(得分:0)
如果要保存二进制值数组,可以使用int
。所以你自动得到这个号码。获得价值也很容易打赌,你打电话给(x & (1 << i))