c - 如何在以下函数中传递十六进制数据
问题描述
我的以下程序具有一个函数,该函数将从 8 字节数据帧中提取特定字节,并将根据起始位和位长度(从起始位计算的长度)给出所需的相应值。
如何将十六进制的 8 字节数据传递给主函数中的指针 *data。例如,这是我的十六进制“05 00 00 00 00 03 E8 00”的帧数据。这是我的程序。如果有人帮我解决这个问题,我会很高兴。我应该获取一个数组并将数据传递0x05 0x00 0x00 0x00 0x00 0x03 0xE8 0x00
到数组中,然后将数组的分配地址分配给指针变量吗?或者只是取一个持有的变量0x050000000003E800
并将这个地址分配给指针。两者都一样吗?提前致谢。
union u_t
{
uint16_t u16;
uint8_t u8[2];
};
uint16_t Frame2Data(uint8_t *data,uint8_t startBit,uint16_t length)
{
uint16_t mask;
uint8_t start;
uint8_t firstByte,offset;
uint8_t numShift;
union u_t ut;
/*if(length == 8) //preliminary, has to be fixed by correct function.
mask = 0xff;*/
if(length == 7)
mask = 0x7F;
if(length == 10)
mask = 0x3ff;
if(length == 12)
mask = 0xfff;
firstByte = startBit / 8;
offset = (firstByte+2) * 8;
start = startBit + length;
numShift = offset - start;
ut.u8[1] = data[firstByte];
ut.u8[0] = data[firstByte+1];
return (ut.u16 >> numShift) & mask;
}
int main()
{
??????????
uint8_t sB = 46;
uint16_t l = 7;
uint16_t extractValue = Frame2Data(?,sB,l);
return 0;
}
解决方案
要将十六进制写入的数据传递给data
,您可以简单地编写:
uint8_t data [] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE8, 0x00};
请注意,变量mask
未初始化,因为l
等于 7,并且所有初始化变量的指令mask
都是死代码,如红色所示,使用源代码分析器: