【问题标题】:Converting char to int [C]将 char 转换为 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) 做什么?

标签: c


【解决方案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 char 或unsigned char。

            【讨论】:

              【解决方案9】:

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

              pow(128,0);
              

              你为什么要乘以一?

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

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

              【讨论】:

                猜你喜欢
                • 2015-12-18
                • 2015-01-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-02-07
                相关资源
                最近更新 更多