以十六进制转换为可读的4字节日期时间

时间:2012-10-09 10:11:14

标签: c++ datetime hex

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

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

2 个答案:

答案 0 :(得分:0)

要将编码数转换为整数,您需要确定它是big-endian还是little-endian。

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

答案 1 :(得分:-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;