c语言 - 如何存储数据类型大于数组的数据?



假设我有一个存储 8 位整数的数组。如何从输入中读取 32 位整数并将其存储在数组的 4 个连续位置?例如。。。

uint8_t * myArray = malloc(1024 * sizeof(uint8_t) ); 
scanf("%x", &myArray[0]);
for (int i = 0; i < 4; i++)
printf("0x%02xn"); // %02x prints an integer in HexaDecimal format with 2 0's padding to the left 
INPUT: 
0xAABBCCDD
OUTPUT: 
0xDD
0xCC
0xBB
0xAA

明白了吗?我希望数据分散到以下位置,而不是丢失最重要的位。我该怎么做?我知道这与指针算术有关,但我不知道是什么。

如果你只是修复 printf 语句,你现在拥有的代码实际上在 C 中按照你想要的方式工作:

由此:

printf("0x%02xn");

对此:

printf("0x%02xn", myArray[i]);

我认为您的 scanf 语句以%x作为格式说明符(无符号 int(有点可疑,但&myArray[0]是一个字节指针。 读入字节地址的 4 字节将溢出到接下来的 3 个字节中,这些字节是分配的数组的一部分。

我可以按如下方式编码:

uint32_t * myArray = malloc(256 * sizeof(uint32_t)); 
uint8_t* myByteArray = (uint8_t*)myArray;
scanf("%x", &myArray[0]);
for (int i = 0; i < 4; i++)
printf("0x%02xn", myByteArray[i]);

如果你想成为一个纯粹主义者,而不是依赖指针黑客。 假设你想要小端序语义,正如你所暗示的那样:

uint32_t* myArray = malloc(256 * sizeof(uint32_t)); 
scanf("%x", &myArray[0]);
for (int i = 0; i < 4; i++)
{
uint32_t val = ((myArray[i/4] >> (i*8)) & 0x000000ff;
printf("0x%02xn", (unsigned int)(val));
}

最新更新