2

我收到了来自服务器的响应,该响应已被压缩并将其转换为 base64 字符串。我已经解码了这个响应,发现它看起来像一个肥皂文档。大多数值都是十六进制格式。所以我有一个参数 datetime 存储值“\xf4\xdd|\xad\x08”。我知道它代表 24.06.1982 日期。

如何将十六进制值转换为日期格式?更喜欢 c/c++ 语言。

4

2 回答 2

0

要将编码后的数字转换为整数,您需要确定它是大端还是小端。

由于您拥有的数据不是字符串,即数字不是文本而是直接二进制,因此您不能明智地使用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],依此类推)。

于 2012-10-09T12:26:16.933 回答
-2

将该十六进制格式转换为数字,您可以使用 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;
于 2012-10-09T10:18:20.387 回答