在C中将字符串转换为十六进制整数

时间:2013-06-03 15:31:32

标签: c type-conversion

我有以下C字符串

"72e4247d3c91f424c62d909d7c1553a5"

它由32个十六进制数字组成。它是一个包含4个十进制整数的数组。如何从这个数组中以整数形式返回数字?

2 个答案:

答案 0 :(得分:3)

您必须分别解析四个32位/ 8个十六进制数字块。最简单的方法是

#include <stdint.h>
#include <stdlib.h>
#include <string.h>

void parse_hex4(char const *str, uint32_t num[4])
{
    char buf[9];  // 8 hex digits + NUL

    buf[8] = '\0';
    for (int i=0; i<4; i++) {
        memcpy(buf, str + i * 8, 8);
        num[i] = strtoul(buf, NULL, 16);
    }
}

这假定str为零填充,正好为32个字符,并且没有输入验证。如果您使用的是Redmond的stuck in the 1980编译器,请使用unsigned long代替uint32_t

答案 1 :(得分:0)

你试过strtol吗?

int val = (int) strtol (hex_string, NULL, 16);

如果它是一个扁平数组,则重复子串。

此致