如何将 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);
}
当我使用 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);
}