嘿,我想知道如何将C中的Int数组转换为字节数组,以及声明方法是什么。如果它更简单并且没有使用指针,我将不胜感激。感谢您的评论
ex:int addr [500]到byte []
另外,我还希望结束字节数组具有相同的数组名称。
答案 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)
如果你想
int
数组后面的内存重新解释为bytes,int
数组的副本是可以接受的,然后您可以创建一个新的char
数组并使用int
复制memcpy
数组:
int ints[500];
char bytes[500 * 4];
memcpy(bytes, ints, 500 * 4);
这与我原始回答中的第一个摘录大致相同,区别在于bytes
包含ints
的副本(即修改一个没有'影响另一个)。关于int
大小和避免魔法常数/重构代码的常见警告适用。