拆分字符串并将各个部分转换为十六进制

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;