C - 将const char hex字符串转换为unsigned char

时间:2016-12-10 14:54:09

标签: c arrays string

我可以找到任何有效的实现,所以我用sccanf写了一个,但是我有一个问题,我将const char转换为unsigned char“FFx16”形式,但是它转换所有字符但是第二个最后一个字符它会改变它对于printf输出的“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F”,(我已将测试函数留给测试),我知道有c ++版本,但我更喜欢纯c,所以无论如何继续我的尝试,但仍然做了工作:(

代码:

   #include <stdlib.h>
   #include <stdio.h>
   #include "util.h"
   #include <string.h>

   char* hex_to_char(const char* hex, int len) {
       char *_a = malloc(len / 2);
       int num = 0;
       unsigned _b;
       while(num < len) {
           sscanf(&hex[num], "%02X", &_b);
           _a[num/2] = _b;
           num++;
       }

       return _a;
   }

用法:

    const char* buf2 = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
    unsigned char start_seed[16];
    int t = 0;
    char* buf = hex_to_char(buf2, 32);
    if(debug == 1) { printf("Start Seed : "); }
    while(t < 16) {
        start_seed[t] = (unsigned char)buf[t];
        if(debug == 1) { printf("%02X", buf[t]); }
        t++;
    }
    if(debug == 1) { printf("\n"); }

//输出:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F

1 个答案:

答案 0 :(得分:0)

使用num += 2代替num++。                     –Wintermute