質問

ネットワーク(またはファイル・ストレージ)上で送信するために、バイトスワップのUUIDへの道を受け入れた標準が存在していますか? (私は16の生のバイトを保存/送信ではなくUUIDを文字列表現に変換したい。)

私は4の32ビット整数にUUIDを分割し、それらのそれぞれにhtonl呼び出し、それが右の匂いはなかったはずです最初に思いました。

:UUIDは、(RFC 4122から)内部構造を有しています
typedef struct {
    unsigned32  time_low;
    unsigned16  time_mid;
    unsigned16  time_hi_and_version;
    unsigned8   clock_seq_hi_and_reserved;
    unsigned8   clock_seq_low;
    byte        node[6];
} uuid_t;

それは行うことは正しいでしょう。

...
uuid.time_low = htonl( uuid.time_low );
uuid.time_mid = htons( uuid.time_mid );
uuid.time_hi_and_version = htons( uuid.time_high_and_version );
/* other fields are represented as bytes and shouldn't be swapped */
....

書き込む前に、その後、correpsonding ntoh ...もう一方の端に読んだ後に呼び出す?

感謝します。

役に立ちましたか?

解決

はい、それを行うには、正しいことです。

各番号(time_lowtime_midtime_hi_and_version)は、バイト順序の対象となっています。 nodeフィールドではありません。 clock_seq_hi_and_reservedclock_seq_lowも、バイト順序の対象となっているが、それらはそれぞれ1バイトであるので、それは問題ではありません。

もちろん、それはあなたが両端に右の順序を選択するか、またはあなたがそれをコントロールしていない場合は順序がもう一方の端にあるかを理解することを確認するためにあなた次第です。もちろん、Microsoftは自分のUUIDのためのリトルエンディアンを使用しています。あなたはここにの UUIDのMicrosoftの定義を参照することができますます。

scroll top