【问题标题】:Storing integer in the array of char将整数存储在 char 数组中
【发布时间】:2012-10-12 20:45:36
【问题描述】:

我一直在阅读这个帖子Store an int in a char array?

我需要将 int 存储在字符数组中。

所以我阅读了上一个帖子并尝试制作自己的演示。但它不起作用,试图弄清楚为什么不这样做很长时间。或许你能给我一些线索或想法吗?

#include <stdio.h>

int main(void) {

    char buffer[4];
    int y = 2200;
    buffer[0] = (y >> 0) & 0xff;
    buffer[1] = (y >> 8) & 0xff;
    buffer[2] = (y >> 16) & 0xff;
    buffer[3] = (y >> 24) & 0xff;

    int x = buffer[0];

    printf("%i = %i\n", y, x);
}

输出

gcc tmp.c && ./a.out
2200 = -104

【问题讨论】:

  • 这并不能直接解决您的问题,但请注意您对系统上int 大小所做的假设。

标签: c arrays types


【解决方案1】:
int x = buffer[0];

buffer[0] 处的char 的值(隐式转换为int)复制到x。它不会将从buffer 开始的第一个sizeof int 字节解释为int,这是您想要的(想想这种行为在常见情况下会巧妙地破坏的邪恶方式,即char c = 10; int x = c。哎呀! )。

意识到buffer[n] 不返回内存地址,它返回char。要将sizeof int 元素解释为一个整体int,只需首先将buffer 转换为int*

int x = *((int*)buffer);

对于偏移量n(以ints 衡量,而不是chars):

int x = *((int*)buffer + n);

另请注意,您的代码假定为sizeof int == 4,这不能保证。

【讨论】:

    【解决方案2】:

    x = buffer[0] 不会做你想做的事。试试memcpy(&amp;x,buffer,sizeof(x))。 (您需要添加#include &lt;string.h&gt;。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2016-04-28
      • 2017-11-10
      • 2010-12-28
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      相关资源
      最近更新 更多