我收到服务器的响应,该服务器已压缩并转换为base64字符串。我已经解码了这个响应,发现它看起来像一个肥皂文件。大多数值都是十六进制格式。所以我有一个参数datetime存储值“\ xf4 \ xdd | \ xad \ x08”。我知道它代表了2006年6月24日的日期。
如何将十六进制值转换为日期格式?喜欢c / c ++语言。
答案 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;