Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符转换为int[C]_C - Fatal编程技术网

将字符转换为int[C]

将字符转换为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^

我有一个要转换为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^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;