如何将 char 数据类型用作数字而不是字符?

How to use char data type as a number rather than a character?

当我使用 char 数据类型将两个数字相加时,我得到的是字符的 ASCII 码之和,而不是数字本身。当我在互联网上进行研究时,各种网站都说 char 类型确实可以用来处理一个字节的数字。但实际上,我得到的是 ASCII 值的总和。为什么会这样?下面只是一个说明问题的示例代码:

uint8_t rows,cols; //uint8_t is just a typedef for char
cin >> rows;
cout << rows + 1 << endl;

字符将字符的 ASCII 等效值存储为整数。

例如

char value = 'A' // == int 65

最好用短整数来存储数字,但如果你真的想,你可以这样做;

char value1 = '2';
char value2 = '5';
char sum = (value1 + value2) - '0'; // int value of sum would be 7

当您使用char时,您使用的是带符号的8位数据类型(大部分)。

你得到 "sum of ASCII" 只是因为 std::cout 被编程为将 char 显示为 ASCII 字符。

尝试

cout << stratic_cast<int16_t>(rows) + 1 << endl;

你会看到你得到的是 'number' 而不是 'ASCII character'。

注意

uint8_t 不是(或者可能不应该是)char,因为 char 被定义为 signed 数据类型,而 uint*代表unsigned.

当人们谈论 "one-byte numbers" 时,他们谈论的是 8 位值,char 的范围从 -128 到 127,unsigned char 的范围从 0 到 255 ,也称为 octets。这些可以直接转换为更大的整数类型和浮点数:

char eight_bit = 122;
float floating_point = eight_bit; // = 122.0

如果您尝试将 '1' 等数字值转换为它所代表的数值,则有 stoi:

#include <string>

int ctoi(char c) {
    std::string temp;
    temp.push_back(c);
    return std::stoi(temp);
}