C语言 将两个uint32_variable转换为一个Uint8



我有一个转换两个uint32变量并将其作为一个uin8变量传递的问题。我不知道该怎么做。或者甚至不知道这是否可能。我想要一个小的尾端方式。也可以将数组值作为一个变量传递unint8_t*,因为我需要将值发送给函数

func (uint8_t *结果);

例子
uint32_t var1 = 1 2 3 4 5 6 7 8
uint32_t var2 = 9 A B C D E F 0

结果

*uint8_t= 12 34 56 78 9A BC DE F0

我尝试过这种方法,但不确定如何使用它与两个uint_32变量

uint32_t value;
uint8_t *result[4];
result[0] = (value & 0x000000ff);
result[1] = (value & 0x0000ff00) >> 8;
result[2] = (value & 0x00ff0000) >> 16;
result[3] = (value & 0xff000000) >> 24;
func(uint8_t *result);

我正在得到***堆栈破坏检测***:终止

您得到的主要错误是由于将结果向量定义为指针数组,但后来用值写入它们。这是在堆上构造的。你想要的是定义一个uint_8的数组,大小为4或8,存储uint32_t对应的值。

因为您使用的是uC,它们可以有不同的字节顺序来表示单词或数据(如int32, int64等)。既然你给出了你期望的例子,我在LSB或小端pc (x86, arm, 64等)上运行代码,那么我必须如下所示解析它。但在uC中,如果是大端序(MSB优先),则反向解析。

#include<stdio.h>
#include<stdint.h>
uint32_t var1 = 0x12345678;
uint32_t var2 = 0x9ABCDEF0;

void to_uint8_t(uint32_t value, uint8_t* result){
for(uint16_t i = 0; i< 4;i++)
result[3 - i] = (value >> (i * 8))& 0xff; /* little endian*/
// result[i] = (value >> (i * 8))& 0xff; /* big endian*/
}
int main(){
uint8_t result[8];

to_uint8_t(var1, result);
to_uint8_t(var2, result + 4);

for(uint16_t i =0; i< 8;i++)
printf("%x ", result[i]);
printf("n");    
}

输出:

12 34 56 78 9a bc de f0 

最新更新