gpt4 book ai didi

c - 使用 sscanf 从字符串中读取十六进制值

转载 作者:行者123 更新时间:2023-11-30 19:02:43 25 4
gpt4 key购买 nike

我想从字符串中读取十六进制值并将其存储为变量,我正在使用 sscanf,但原始数字是 6 字节,我只得到最低有效的 4 字节。

这是我正在使用的代码:

#include <stdio.h>

int main(void) {
const char my_string[] ="\r\n0080254800DA 0x02 C\n0080254800DA 0x02 P\n9C04EB06ACA2 0x03 P";
unsigned int a,b,c,d,e,f;
char s1,s2,s3;
sscanf(my_string, "\r\n%16x %X %c\n%16x %x %c\n%16x %x %c\n", &a, &b, &s1,&c,&d,&s2,&e,&f,&s3);
printf("\r\n%#-X %#2x %c\n%#-X %#2x %c\n%#-X %#2x %c\n", a,b, s1,c,d,s2,e,f,s3);
return 0;
}

这是我得到的结果:

0X254800DA 0x2C

0X254800DA 0x02P

0XEB06ACA2 0x3 P

我该如何纠正这个问题?

最佳答案

我猜你使用的是 32 位大小的整数。要存储 12 个字符的十六进制整数,您需要大于 32 位类型:

#include <stdio.h>
/* this include defines [u]int[8|16|32|64]_t types */
#include <stdint.h>

int main(void) {
const char my_string[] ="\r\n0080254800DA 0x02 C\n0080254800DA 0x02 P\n9C04EB06ACA2 0x03 P";

/* use Unsigned INTeger on 64 bits */
uint64_t a, b, c, d, e, f;
char s1,s2,s3;

/* sscanf/printf formatting need some +l to handle such types */
sscanf(my_string, "\r\n%16lx %lX %c\n%16lx %lx %c\n%16lx %lx %c\n", &a, &b, &s1,&c,&d,&s2,&e,&f,&s3);
printf("\r\n%#-lX %#2lx %c\n%#-lX %#2lx %c\n%#-lX %#2lx %c\n", a,b, s1,c,d,s2,e,f,s3);
return 0;
}

gcc-tio 上测试

关于c - 使用 sscanf 从字符串中读取十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com