ネットワーク上のUUIDとバイトスワップ
-
19-09-2019 - |
質問
ネットワーク(またはファイル・ストレージ)上で送信するために、バイトスワップの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_low
、time_mid
、time_hi_and_version
)は、バイト順序の対象となっています。 node
フィールドではありません。 clock_seq_hi_and_reserved
とclock_seq_low
も、バイト順序の対象となっているが、それらはそれぞれ1バイトであるので、それは問題ではありません。
もちろん、それはあなたが両端に右の順序を選択するか、またはあなたがそれをコントロールしていない場合は順序がもう一方の端にあるかを理解することを確認するためにあなた次第です。もちろん、Microsoftは自分のUUIDのためのリトルエンディアンを使用しています。あなたはここにの UUIDのMicrosoftの定義を参照することができますます。
所属していません StackOverflow