c - 使用类型转换将 char 转换为 int 使 C 中的 1 变为 49 和 0 变为 48?
问题描述
我有一个由二进制值组成的单字节 char 数组,我试图将其拆分为二维 int 数组(低 nybble 和高 nybble)。这是我的代码:
int nybbles[2][4]; //[0][] is low nybble, [1][] is high nybble.
for (int i = 0; i < 4; i++) {
nybbles[0][i] = (int)binarr[i];
nybbles[1][i] = (int)binarr[4 + i];
printf("%c%d ", binarr[i], nybbles[0][i]);
printf("%c%d\n", binarr[4 + i], nybbles[1][i]);
}
这个的输出是:
048
149
048
048
149
048
048
048
我可以通过在两行代码的末尾添加“- 48”来轻松解决此问题,如下所示:
nybbles[0][i] = (int)binarr[i] - 48;
nybbles[1][i] = (int)binarr[4 + i] - 48;
但是,我认为这是一个非常暴力的解决方案。为什么这个问题仍然存在?有比我更好的修复吗?
解决方案
值 48 和 49 是字符'0'
和的 ASCII 码'1'
。
与其减去 48,不如减去'0'
。这让你更清楚你在做什么。
nybbles[0][i] = binarr[i] - '0';
nybbles[1][i] = binarr[4 + i] - '0';
推荐阅读
- c# - MVVM 跨字段绑定 CodeBehind
- reactjs - withFormik如何在handleSubmit中访问包装表单的道具
- javascript - 当父元素是 contentEditable 时,是否可以防止子元素被删除?
- python - 第二次调用一个函数,只有轻微的变化
- python - Python Tkinter filedialog 保存和打开问题(不打开,不让选择名称保存)
- javascript - 如何以递归方式获取树路径?
- firebase - 如何在 Firebase 中创建没有电子邮件的用户?
- php - Shell 响应中的字符串搜索
- android - android从gson获取内部列表参数时遇到问题
- javascript - 如何理解错误“TypeError:无法读取未定义的属性'id'”?