将char数组中的元素转换为int

时间:2014-07-21 15:09:49

标签: c++ arrays char

我有一个80个元素的char数组,我正在尝试将特定元素添加到integer,并且会出现一些数字错误。 十六进制的数组元素40是 0xC0 。当我尝试将其分配给integer时,我得到了十六进制 0xFFFFC0 ,我不知道为什么。

char tempArray[80]; //Read in from file, with element 40 as 0xC0
int tempInt = (int)tempArray[40]; //Output as 0xFFFFC0 instead of 0x0000C0

5 个答案:

答案 0 :(得分:14)

根据您的实施情况,C ++中的char类型 一个signed类型一个{ {1}}类型。 (C ++标准要求实现选择任一方案)。

为了安全起见,请在您的情况下使用unsigned

答案 1 :(得分:3)

之所以如此,是因为char被视为签名号码,而int的促销会保留该号码。将数组从char更改为unsigned char以避免它。

答案 2 :(得分:3)

因为0XC0中的char为否定,并且演员将该符号保留为int。如果要保持直接二进制转换或纯正值

,则应使用unsigned char

答案 3 :(得分:1)

为了更方便,我总是在声明和转换之前使用unsignedsigned。你可以写下面的内容:

unsigned char tempArray[80]; //Read in from file, with element 40 as 0xC0
unsigned int tempInt = (unsigned int)tempArray[40]; //Output as 0xFFFFC0 instead of 0x0000C0

答案 4 :(得分:0)

char可能会被签名,因此从负char值转换将导致负int值,这通常用二进制补码表示,从而产生非常高的二进制表示

相反,要么使用int tempInt = 0xFF & tempArray[40],要么将tempArray定义为unsigned char,要么强制转换为unsigned charint tempInt = (unsigned char)tempArray[40](不确定这是否是已定义的行为)。