将字符转换为int[C]
我有一个要转换为int的char字节。基本上,我使用fopen命令从文件中获取值(0x13),并将其存储到名为buff的char缓冲区中 我正在做以下工作:将字符转换为int[C],c,C,我有一个要转换为int的char字节。基本上,我使用fopen命令从文件中获取值(0x13),并将其存储到名为buff的char缓冲区中 我正在做以下工作: //assume buff[17] = 0x13 v->infoFrameSize = (int)buff[17] * ( 128^0 ); infoFrameSize是一种int类型,存储在名为“v”的结构中 我得到的v->infoFrameSize的值是0x00000980。这应该是0x00000013吗 我尝试将乘以128^
//assume buff[17] = 0x13
v->infoFrameSize = (int)buff[17] * ( 128^0 );
infoFrameSize是一种int类型,存储在名为“v”的结构中
我得到的v->infoFrameSize的值是0x00000980。这应该是0x00000013吗
我尝试将乘以128^0得到正确的输出:
v->infoFrameSize = 0x00000013
任何关于这里正在发生的事情的信息或建议的阅读材料都会很好。谢谢
^
是按位异或运算,而不是幂运算。要将字符
转换为整数
,只需强制转换它:
char c = ...;
int x = (int) c;
C中的运算符^执行位运算-XOR。
128异或0等于128。128^0没有做你认为它做的事情
cout << (128^0)
在C
128^0
中,它等于128和0的按位异或,它不会将128提升到0的幂(仅为1)
char
只是一个由单个字节组成的整数,要将其“转换”为int
(这并不是真正的转换,只是将字节存储为更大的数据类型),您可以:
塔达。在
^0
术语中没有意义。任何与零异或的值都保持不变(因此128^0
为128)
您得到的值是正确的;将0x13(aka 19)乘以128(aka 0x80),得到0x0980(aka 2432)
为什么您希望赋值忽略乘法?K&R会让您使用getc()从文件中读取一个字节,并将其直接存储到int中,从而消除您可能看到的任何问题。但是,如果要将文件读入字节数组,只需按如下方式转换为int:
v->infoFrameSize = (int)buff[17];
我不知道你为什么要乘以128^0。 我所知道的从
char
转换到int
的唯一问题是char
可以有符号或无符号,这取决于平台。如果恰巧是有符号的,则存储在字符中的大正数可能最终被视为负数。打印时,它将是负数或异常大的数字(如果打印为无符号整数)。
解决方案就是在这种情况下显式地使用有符号字符
或无符号字符
。“^”是一种按位异或运算,如果您想使用指数
pow(128,0);
你为什么要乘以一
只需定义一个int并按如下方式设置,即可将char转换为int:
char x = 0x13;
int y;
y = (int)x;
你的问题毫无意义。我无法想象在我最疯狂的梦中(1)你认为
128^0
的计算结果是什么,(2)为什么你要乘以该值,然后对结果不是原始数字感到不高兴。即使^
意味着指数运算,128^0
不是1
?为什么不能将char
分配给int
?您希望乘(128^0)
做什么?我假设128^0只是一个简化,实际上您将使用变量。否则,你为什么要乘以应该始终计算为1的值呢?@bracc0re没有意义的是你认为它应该在代码中做什么,即使^
意味着求幂。=)
pow(128,0);
char x = 0x13;
int y;
y = (int)x;