将char转换为int [C]

时间:2011-11-04 21:39:57

标签: c

我有一个我希望转换为int的字节。基本上我使用fopen命令从文件中获取值(即0x13)并将其存储到名为buff的char缓冲区中。

我正在做以下事情:

//assume buff[17] = 0x13

v->infoFrameSize = (int)buff[17] * ( 128^0 );

infoFrameSize是一个int类型,存储在名为'v'的结构中。

我获得的v-> infoFrameSize的值是0x00000980。应该是0x00000013吗?

我尝试取出乘以128 ^ 0 并得到正确的输出:

v->infoFrameSize = 0x00000013

有关此处发生的事情的任何信息或建议的阅读材料都会很棒。谢谢!

9 个答案:

答案 0 :(得分:10)

^是按位xor运算,而不是取幂。

答案 1 :(得分:2)

C中的运算符^执行位操作 - 异或。 128 xor 0等于128。

答案 2 :(得分:1)

128 ^ 0没有按照你的想法做到。

cout << (128^0)

返回128。

试试pow(128,0)。然后,将以下内容添加到代码顶部:

#include <math.h>

另外,请注意pow总是返回一个浮点数。因此,您需要将最终答案转换为int。所以:

(int)(buff[17] * pow(128,0));

答案 3 :(得分:1)

在C 128 ^ 0中等于128和0的按位XOR,它不会将幂提高128到0(仅为1)。

char只是一个由单个字节组成的整数,用于将其“转换”为int(实际上不是转换,你只是将字节存储到一个更大的数据中)你这样做:

char c = 5;
int i = (int)c

多田。

答案 4 :(得分:1)

^0一词毫无意义。任何与零相关的东西都保持不变(因此128^0为128)。

你得到的价值是正确的;当你将0x13(又名19)乘以128(又名0x80)时,你得到0x0980(又名2432)。

为什么你期望赋值忽略乘法?

答案 5 :(得分:0)

要将char转换为int,您只需将其转换为:

char c = ...;
int x = (int) c;

答案 6 :(得分:0)

K&amp; R会让你使用getc()读取文件中的一个字节并将其直接存储到int中,这样可以消除您可能遇到的任何问题。但是,如果要从文件中读取字节数组,只需按如下方式转换为int:

v->infoFrameSize = (int)buff[17];

答案 7 :(得分:0)

我不确定你为什么乘以128 ^ 0。 从char转换为int时,我所知道的唯一问题是char可以签名或取消签名,具体取决于平台。如果它恰好被签名,那么存储在char中的大正数可能最终被视为负数。当您打印它时,它将是负数或异常大数(如果您将其打印为无符号整数)。 解决方案就是在这种情况下明确使用signed charunsigned char

答案 8 :(得分:0)

“^”是按位异或操作,如果你想做指数使用

pow(128,0);

为什么你乘以?

只需定义一个int并将其设置为:

,就可以从char转换为int
char x = 0x13;
int y;
y = (int)x;