如何将int数组转换为C中的字节数组

时间:2012-02-19 00:33:29

标签: c arrays byte

嘿,我想知道如何将C中的Int数组转换为字节数组,以及声明方法是什么。如果它更简单并且没有使用指针,我将不胜感激。感谢您的评论

ex:int addr [500]到byte []

另外,我还希望结束字节数组具有相同的数组名称。

4 个答案:

答案 0 :(得分:10)

如果你试图重新解释 int数组后面的内存作为一个字节数组,只有这样:

int ints[500];
char *bytes = (char *) ints;

不能在不使用指针转换的情况下执行此操作,因为声明[]数组意味着在堆栈上进行分配,并且不能用于重新解释现有内存。

显然,你需要知道自己在做什么。对于每个int,将有({通常,取决于平台等)4 char s,因此您的新数组将具有500*4个元素。看看输出的内容:

printf("char size: %d, int size: %d", sizeof(char), sizeof(int));

告诉你要确定。

如果您试图将每个int解释为char,即获得相同数量的char,就像{{1} s},然后你不能没有循环和手动转换(通常是新的内存区域)。

答案 1 :(得分:2)

您可以使用联盟。

union {
  int ints[500];
  char bytes[0];
} addr;

答案 2 :(得分:0)

使用指针但没有指针可能更容易,请尝试以下方法:

    #include <stdio.h>

    typedef unsigned char byte;

    void main() {
            int addr_size = 500;
            int addr[ addr_size ];
            byte bytes[ addr_size * 4 ];

            int i;
            for( i = 0; i < addr_size; i++ ) {
                    bytes[ i ] = (byte)( addr[ i ] >> 24);
                    bytes[ i + 1 ] = (byte)( addr[ i ] >> 16);
                    bytes[ i + 2 ] = (byte)( addr[ i ] >> 8);
                    bytes[ i + 3 ] = (byte)addr[ i ];
            }
    }

答案 3 :(得分:0)

如果你想

  1. int数组后面的内存重新解释为bytes,
  2. 想要避免指针语法 - 无论出于何种原因 - 和
  3. 制作int数组的副本是可以接受的,
  4. 然后您可以创建一个新的char数组并使用int复制memcpy数组:

    int ints[500];
    char bytes[500 * 4];
    memcpy(bytes, ints, 500 * 4);
    

    这与我原始回答中的第一个摘录大致相同,区别在于bytes包含ints副本(即修改一个没有'影响另一个)。关于int大小和避免魔法常数/重构代码的常见警告适用。