Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将字符串转换为十六进制整数_C_Type Conversion - Fatal编程技术网

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

在C语言中将字符串转换为十六进制整数,c,type-conversion,C,Type Conversion,我有下面的C字符串 "72e4247d3c91f424c62d909d7c1553a5" 它由32个十六进制数字组成。它是一个包含4个十六进制整数的数组。如何从该数组中获取整数形式的数字?您是否尝试过strtol int val = (int) strtol (hex_string, NULL, 16); 如果子字符串是展平数组,则对子字符串重复此操作 关于您必须分别解析四个32位/8个十六进制数字块。最简单的方法是 #include <stdint.h> #include &l

我有下面的C字符串

"72e4247d3c91f424c62d909d7c1553a5"

它由32个十六进制数字组成。它是一个包含4个十六进制整数的数组。如何从该数组中获取整数形式的数字?

您是否尝试过
strtol

int val = (int) strtol (hex_string, NULL, 16);
如果子字符串是展平数组,则对子字符串重复此操作


关于

您必须分别解析四个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);
    }
}
#包括
#包括
#包括
void parse_hex4(char const*str,uint32_t num[4])
{
char buf[9];//8个十六进制数字+NUL
buf[8]='\0';

对于(int i=0;i32“digits”,只包含一个数字。至于如何取回它们——您有进行初始转换的代码吗?只需将其反转。最有可能的是,一次取8个数字,并将每个数字转换为其整数表示形式,可能使用sscanf()@mah检查我的答案,它有效吗?有十几种方法可以很容易地将字符十六进制转换成二进制。(但是你真的有字符十六进制,或者这只是字符串二进制值的十六进制转储?)@热舔,它真的是数字。我用sprintf把它转过来,现在我想拿回初始值。但不幸的是,我做不到。这很清楚。首先,你需要理解一个字符串(包含代表十六进制值的字符0-F)与一个字符串(包含几乎任何东西)之间的区别“抛弃"十六进制。你知道区别吗?你的函数不需要将终止符添加到
buf
,并添加一个
str+=8
?@simonc:谢谢,补充了这一点,并警告字符串应该正确填充。在我看来,你可能会与endianness相冲突。@HotLicks:strtoul
的输入的endianness是固定的,输入的endianness也是固定的
num
:两者都是小尾数。只有在个体
uint32\u t
s内部,尾数变化,但在C中始终如此,这与手头的问题无关。是的,但OP数据混乱的尾数不是固定的。