Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在以下函数中传递十六进制数据_C_Arrays_Pointers_Hex - Fatal编程技术网

C 如何在以下函数中传递十六进制数据

C 如何在以下函数中传递十六进制数据,c,arrays,pointers,hex,C,Arrays,Pointers,Hex,我有下面的程序,它有一个函数,可以从8字节的数据帧中提取特定的字节,并根据起始位和从起始位开始计算的位长度给出所需的相应值 如何将8字节的十六进制数据传递到主函数中的指针*数据。 例如,这是十六进制'05 00 00 03 E8 00'中的帧数据。这是我的节目。如果有人帮我解决这件事,我会很高兴的。我是否应该获取一个数组,并将数据作为0x05 0x00 0x00 0x00 0x00 0x03 0xE8 0x00传递到数组中,然后将数组的分配地址指定给指针变量?或者只取一个包含0x05000000

我有下面的程序,它有一个函数,可以从8字节的数据帧中提取特定的字节,并根据起始位和从起始位开始计算的位长度给出所需的相应值

如何将8字节的十六进制数据传递到主函数中的指针*数据。 例如,这是十六进制'05 00 00 03 E8 00'中的帧数据。这是我的节目。如果有人帮我解决这件事,我会很高兴的。我是否应该获取一个数组,并将数据作为0x05 0x00 0x00 0x00 0x00 0x03 0xE8 0x00传递到数组中,然后将数组的分配地址指定给指针变量?或者只取一个包含0x05000000003E800的变量,并将此地址分配给指针。两者是否相同?提前谢谢

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;
}

要将十六进制写入的数据传递给数据,只需编写:

uint8_t data [] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE8, 0x00};
请注意,变量掩码未初始化,因为l等于7,初始化变量掩码的所有指令都是死代码,如红色所示,带有源代码分析器:


有点不清楚你想要什么,没有十六进制数据这样的东西。十六进制只是一种写入数据的方式。一次包含多个字节的变量(例如,无符号long long)不一定与字节数组相同,因为。为了得到正确的答案,请回答您的问题并创建一个带有C99代码的@user8540390可以使用复合文字:Frame2Datauint8_t[8]{5,0,0,0,3,0xE8,0},sB,l;但是什么是最好的取决于1如何创建数据,2在Frame2Data之后使用。是的,因为长度等于7,所以掩码初始化为0x7F。是的,理解并得到了它。谢谢