将 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 &lt;math.h&gt;

另外,请注意 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 charunsigned char

【讨论】:

【参考方案9】:

"^" 是按位异或运算,如果你想做指数使用

pow(128,0);

你为什么要乘以一?

您可以通过简单地定义一个 int 并像这样设置它来将一个 char 转换为一个 int:

char x = 0x13;
int y;
y = (int)x;

【讨论】:

以上是关于将 char 转换为 int [C]的主要内容,如果未能解决你的问题,请参考以下文章

C语言 int转char

将 char 转换为 int 的奇怪错误(目标 C)

C++CString转换为const char *类型

c++ 不使用 C 标准库将字符串和 int 转换为 char*

怎么把int转换为char类型

c ++奇怪的问题将char转换为int