【问题标题】:How to convert a hexadecimal to byte array in C如何在C中将十六进制转换为字节数组
【发布时间】:2013-06-05 09:20:56
【问题描述】:

“C”中是否有任何库可以将十六进制转换为 C 中的字节数组

例如

Input const char *ptr="ff:ff:fe:ff"

有一个“:”分隔符值

【问题讨论】:

    标签: c bytearray hex


    【解决方案1】:

    您可以使用strtoll 函数进行单个字节的转换。该函数将base 参数作为其第三个参数,并报告输入中的新位置,让您决定是跳过分隔符并读取更多数据,还是结束循环:

    char *ptr="ff:ff:fe:ff";
    for (;;) {
        int res = strtol(ptr, &ptr, 16);
        printf("%x\n", res);
        if (*ptr == ':') {
            ptr++;
        } else {
            break;
        }
    }
    

    Demo on ideone.

    【讨论】:

      【解决方案2】:

      您可能可以使用sscanf() 来读取其中的值。

      #include <stdio.h>
      
      int main() {
          const char *input = "ff:ff:fe:ff";
          unsigned int array[4];
          int ret;
      
          ret = sscanf(input, "%02x:%02x:%02x:%02x",
              &array[0], &array[1], &array[2], &array[3]);
      
          if (ret != 4) {
              printf("Match failed.\n");
              return -1;
          }
      
          printf("array = { %02x, %02x, %02x, %02x }\n",
              array[0], array[1], array[2], array[3]);
      
          return 0;
      }
      

      输出:

      array = { ff, ff, fe, ff }
      

      【讨论】:

        【解决方案3】:
        #include <stdio.h>
        #include <string.h>
        #include <ctype.h>
        
        #define h2i(x) (isdigit(x) ? (x) - '0' : tolower(x) - 'a' + 10)
        
        int main(void){
            const char *ptr="ff:ff:fe:ff";
            size_t size = (strlen(ptr)+1)/3;
            unsigned char byte[size];
            int i;
            for(i = 0; i < size; ++i){
                byte[i] = h2i(ptr[i*3])*16 + h2i(ptr[i*3+1]);
                //printf("%02x", byte[i]);//for check
            }
        
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-17
          • 2017-03-05
          • 2011-09-15
          • 2012-04-11
          • 1970-01-01
          • 2017-08-23
          • 2019-03-07
          • 2011-01-10
          相关资源
          最近更新 更多