拆分字符串并将各个部分转换为十六进制
Split a string and convert individual pieces to hexadecimal
我有一个像 "03FE"
这样的字符串,其中包含十六进制值。我需要将这个字符串分成两部分,并将每个单独的部分转换为等效的十六进制。
也就是说,我在一个变量中需要0x03
,在另一个变量中需要0xFE
。
例如,如果我不必拆分字符串,我会这样做:
char *p;
uint32_t uv=0;
uv=strtoul(&string_to_convert, &p, 16);
如果需要拆分字符串,应该如何进行?
我觉得
- 您可以创建一个额外的长度为
n+1
的缓冲区,您希望在其中将字符串拆分为 n
字节标记
- 使用
snprintf()
打印出n
个字符到临时缓冲区。
- 使用
strtoul()
将临时缓冲区内容转换为十六进制值。
- 迭代直到剩下标记。
通过这种方式,您可以使用一种通用方法来标记化 任意 长度的源字符串并将其转换为标记,然后将它们转换为十六进制值。
拆分 strtoul
的输出改为:
uint8_t uv_hi = uv >> 8;
uint8_t uv_lo = uv & 0xFF;
我有一个像 "03FE"
这样的字符串,其中包含十六进制值。我需要将这个字符串分成两部分,并将每个单独的部分转换为等效的十六进制。
也就是说,我在一个变量中需要0x03
,在另一个变量中需要0xFE
。
例如,如果我不必拆分字符串,我会这样做:
char *p;
uint32_t uv=0;
uv=strtoul(&string_to_convert, &p, 16);
如果需要拆分字符串,应该如何进行?
我觉得
- 您可以创建一个额外的长度为
n+1
的缓冲区,您希望在其中将字符串拆分为n
字节标记 - 使用
snprintf()
打印出n
个字符到临时缓冲区。 - 使用
strtoul()
将临时缓冲区内容转换为十六进制值。 - 迭代直到剩下标记。
通过这种方式,您可以使用一种通用方法来标记化 任意 长度的源字符串并将其转换为标记,然后将它们转换为十六进制值。
拆分 strtoul
的输出改为:
uint8_t uv_hi = uv >> 8;
uint8_t uv_lo = uv & 0xFF;