我有一个我希望转换为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
有关此处发生的事情的任何信息或建议的阅读材料都会很棒。谢谢!
答案 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 char
或unsigned char
。
答案 8 :(得分:0)
“^”是按位异或操作,如果你想做指数使用
pow(128,0);
为什么你乘以?
只需定义一个int并将其设置为:
,就可以从char转换为intchar x = 0x13;
int y;
y = (int)x;