将 char 转换为 int [C]
Posted
技术标签:
【中文标题】将 char 转换为 int [C]【英文标题】:Converting char to int [C] 【发布时间】:2011-11-04 21:39:56 【问题描述】:我有一个要转换为 int 的 char 字节。基本上,我使用 fopen 命令从文件中获取值(即 0x13)并将其存储到一个名为 buff 的字符缓冲区中。
我正在做以下事情:
//assume buff[17] = 0x13
v->infoFrameSize = (int)buff[17] * ( 128^0 );
infoFrameSize 是一种 int 类型,存储在名为“v”的结构中。
我为 v->infoFrameSize 得到的值是 0x00000980。这应该是 0x00000013 吗?
我尝试取出 乘以 128 ^ 0 并得到正确的输出:
v->infoFrameSize = 0x00000013
任何关于这里发生的事情的信息或建议的阅读材料都会很棒。谢谢!
【问题讨论】:
你的问题毫无意义。 我无法想象在我最疯狂的梦想中 (1) 你认为128^0
的结果是什么,以及 (2) 你为什么乘以那个值,然后不高兴你的结果是不是原来的号码。
即使^
表示求幂,128^0
也不会是1
?
您为什么不能将您的char
分配给int
?
你期望乘以 (128^0)
做什么?
【参考方案1】:
^
是按位异或运算,而不是求幂。
【讨论】:
@brazc0re 即使^
意味着取幂,你认为它应该在代码中执行的操作是没有意义的。 =)【参考方案2】:
C 中的运算符 ^ 进行位运算 - 异或。 128 xor 0 等于 128。
【讨论】:
【参考方案3】:在 C 中,128 ^ 0
等于 128 和 0 的按位异或,它不会将 128 提高到 0 的幂(即 1)。
char
只是一个由单个字节组成的整数,将其“转换”为int
(这并不是真正的转换,您只是将字节存储为更大的数据类型) :
char c = 5;
int i = (int)c
tada。
【讨论】:
【参考方案4】:^0
一词毫无意义。任何与零异或的东西都保持不变(所以128^0
是 128)。
你得到的值是正确的;当你将 0x13(又名 19)乘以 128(又名 0x80)时,你得到 0x0980(又名 2432)。
为什么你会期望赋值忽略乘法?
【讨论】:
【参考方案5】:128^0 没有按照你的想法做。
cout << (128^0)
返回 128。
试试pow(128,0)
。然后,将以下内容添加到代码的顶部:
#include <math.h>
另外,请注意 pow 总是返回一个浮点数。因此,您需要将最终答案转换为 int。所以:
(int)(buff[17] * pow(128,0));
【讨论】:
我假设 128^0 只是一个简化,并且您实际上将使用变量。否则,你为什么要乘以应该总是计算为 1 的东西?【参考方案6】:要将char
转换为int
,只需将其转换:
char c = ...;
int x = (int) c;
【讨论】:
【参考方案7】:K&R 会让您使用 getc() 从文件中读取一个字节,并将其直接存储到一个 int 中,这样可以消除您可能会看到的任何问题。但是,如果您从文件中读取到字节数组,只需按如下方式转换为 int:
v->infoFrameSize = (int)buff[17];
【讨论】:
【参考方案8】:我不确定你为什么要乘以 128^0。
从char
转换为int
时,我知道的唯一问题是char
可以签名或未签名,具体取决于平台。如果它碰巧被签名,存储在 char 中的大正数可能最终被视为负数。当您打印它时,它要么是一个负数,要么是一个异常大的数字(如果您将它打印为一个无符号整数)。
解决方案就是在这种情况下明确使用signed char
或unsigned char
。
【讨论】:
【参考方案9】:"^" 是按位异或运算,如果你想做指数使用
pow(128,0);
你为什么要乘以一?
您可以通过简单地定义一个 int 并像这样设置它来将一个 char 转换为一个 int:
char x = 0x13;
int y;
y = (int)x;
【讨论】:
以上是关于将 char 转换为 int [C]的主要内容,如果未能解决你的问题,请参考以下文章