我收到了来自服务器的响应,该响应已被压缩并将其转换为 base64 字符串。我已经解码了这个响应,发现它看起来像一个肥皂文档。大多数值都是十六进制格式。所以我有一个参数 datetime 存储值“\xf4\xdd|\xad\x08”。我知道它代表 24.06.1982 日期。
如何将十六进制值转换为日期格式?更喜欢 c/c++ 语言。
要将编码后的数字转换为整数,您需要确定它是大端还是小端。
由于您拥有的数据不是字符串,即数字不是文本而是直接二进制,因此您不能明智地使用sscanf()
它是一个字符串解析函数。
相反,是这样的:
const char *buffer = "\xf4\xdd|\xad\x08";
unsigned int stamp = (((unsigned char) buffer[0]) << 24) |
(((unsigned char) buffer[1]) << 16) |
(((unsigned char) buffer[3]) << 8) |
((unsigned char) buffer[4]);
如果它是 little-endian,则反转索引顺序(这样buffer[0]
就变成了buffer[4]
,依此类推)。
将该十六进制格式转换为数字,您可以使用 scanf()
int a,b,c,d;
sscanf(input,"\\x%x\\x%x|\\x%x\\x%x",&a,&b,&c,&d);
long result=a<<24 | b<<16 | c<<8 | d;
这将为您提供 4108168456 的价值,您提供。
你有什么关于格式的进一步信息?
int a,b,c,d;
sscanf(input,"\\x%x\\x%x|\\x%x\\x%x",&a,&b,&c,&d);
long field1=a<<8 | b;
long field2=c<<8 | d;