По сути, у меня есть строка байтов данных, например: \x00\x00\x00\x00 \x08\x00\x00\x00 \x05\x00\x00\x00
(пробелы используются только для видимости, в реальной строке байтов нет пробелов). Данные имеют порядок байтов.
Теперь мне нужно извлечь вторую 4-байтовую группу (\x08\x00\x00\x00
, то есть 128
) и превратить их в длинную без знака. Итак, uint32_t
тип.
По сути, я делаю: moveBlock(&gdata->str[4], &second_group, 4);
Где moveBlock
- это макрос: #define moveBlock(src,dest,size) memmove(dest,src,size)
.
Я использую макрос, потому что лично я предпочитаю этот порядок параметров, если кому-то интересно.
gdata->str
- указатель на gchar *
( ссылка здесь )
и gdata это GString *
( ссылка здесь ).
second_group
определяется как uint32_t
.
Итак, это работает иногда , но не всегда. Честно говоря, я не знаю, что я делаю неправильно!
Спасибо!
P.S .: Код немного длинен и странен, и я не думаю, что прохождение всего этого было бы уместно. Если кто-то не попросит об этом, я не буду излишне загромождать вопрос