首页 > 解决方案 > 使用类型转换将 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;

但是,我认为这是一个非常暴力的解决方案。为什么这个问题仍然存在?有比我更好的修复吗?

标签: cchar

解决方案


值 48 和 49 是字符'0'和的 ASCII 码'1'

与其减去 48,不如减去'0'。这让你更清楚你在做什么。

nybbles[0][i] = binarr[i] - '0';
nybbles[1][i] = binarr[4 + i] - '0';

推荐阅读