gpt4 book ai didi

c - 如何将十六进制值放入 24 位结构中

转载 作者:行者123 更新时间:2023-11-30 21:30:33 28 4
gpt4 key购买 nike

所以我有2个结构:

struct cmd {
uint8_t a;
uint8_t b;
uint8_t c;
};

typedef struct someName{
uint8_t size;
struct cmd cmdID;
} someName_t;

我得到了一个包含字符串“0xabc”char res[0]

这个0xabc需要放在cmd结构中。

但问题是 0xabc 是 12 位 (1010 1011 1100),所以如果我将其放入只有 uint8_t a 的结构中并且uint8_t b 它会起作用,因为它会“适合”16 位。但我得到了 uint8_t auint8_t buint8_t c 所以 24 位,这就是我的问题..

我尝试过:

someName_t msg;
sscanf(res[0], "0x%x", &(msg.cmdID));

但这不起作用。但是,如果我从结构中删除 uint8_t c 变量,这确实有效,因为它适合剩余的 16 位..

那么我怎样才能在不调整结构的情况下将值“0xabc”放入这个(24位)结构中。

最佳答案

如果您可以控制输入格式,即您可以保证它始终是类似于 0xabc 的内容,那么您可以尝试:

const char input[] = "0xabc";
uint32_t tmp;
sscanf(input, "0x%x", &tmp);

struct cmd cmdid;
cmdid.a = (tmp & 0xFF0000U) >> 16;
cmdid.b = (tmp & 0xFF00U) >> 8;
cmdid.c = (tmp & 0xFFU);

关于c - 如何将十六进制值放入 24 位结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419506/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com