У меня есть следующая программа, в которой есть функция, которая извлекает конкретные байты из кадра из 8-байтовых данных и дает соответствующее значение, необходимое на основе начального бита и длины бита (длина, отсчитанная от начального бита).
Как я могу передать данные из 8 байтов, которые в шестнадцатеричном формате, в мой указатель * данные в основной функции.
Например, это мои данные кадра в шестнадцатеричном формате «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;
}