2

圧縮されてbase64文字列に変換されたサーバーからの応答があります。この応答をデコードしたところ、石鹸のドキュメントのように見えるものであることがわかりました。ほとんどの値は16進形式です。したがって、値「\ xf4 \ xdd | \ xad\x08」を格納するパラメータdatetimeがあります。私はそれが1982年6月24日の日付を表したものであることを知っています。

16進値を日付形式に変換するにはどうすればよいですか?c /c++言語を優先します。

4

2 に答える 2

0

エンコードされた数値を整数に変換するには、それがビッグ エンディアンかリトル エンディアンかを決定する必要があります。

あなたが持っているデータは文字列ではないため、つまり数値はテキストではなく直接バイナリでsscanf()あるため、文字列解析関数である which をまともに使用することはできません。

代わりに、次のようになります。

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]);

リトル エンディアンの場合は、インデックス シーケンスを逆にします (そのようにbuffer[0]なりbuffer[4]ます)。

于 2012-10-09T12:26:16.933 に答える
-2

その 16 進形式を数値に変換するには、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 に答える