[解決済み] hton/ntohを使用するタイミングと、自分でデータ変換するタイミングは?
2022-02-08 05:02:19
質問
で、ビッグエンディアンの他機種からバイト配列を変換する場合、以下のようになります。
long long convert(unsigned char data[]) {
long long res;
res = 0;
for( int i=0;i < DATA_SIZE; ++i)
res = (res << 8) + data[i];
return res;
}
他のマシンがリトルエンディアンであれば
long long convert(unsigned char data[]) {
long long res;
res = 0;
for( int i=DATA_SIZE-1;i >=0 ; --i)
res = (res << 8) + data[i];
return res;
}
送信時はhton、受信時はntohでよいのでは?hton/ntonは整数を変換するもので、このconvert()はchar配列のためのものだからでしょうか?
どのように解決するのですか?
その
hton
/
ntoh
の間の変換を行う関数です。
ネットワーク順
と
ホストオーダー
. もしこの2つが同じなら(つまりビッグエンディアンマシンなら)、これらの関数は何もしない。ですから、エンディアンを交換するために移植的に信頼することはできません。また、ご指摘の通り、これらの関数は16ビット(
htons
) と32ビット (
htonl
) 整数で、コードでは最大で
sizeof(long long)
の方法に応じて
DATA_SIZE
が設定されています。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン