やろうとしていること
C言語で構造体をtcpのソケットを用いて送受信しようとしています。
#include <sys/stat.h>で定義がされている
struct statをそのまま送りたいと考えていました。
問題点
struct statをネットワークバイトオーダー(ビッグエンディアン)に変換したいと思い、メンバ変数を一つずつ変換する処理を書いていたところでした。
struct statのメンバ変数にはmtime,atime,blksizeなどlong型に相当する変数が存在していまして、私のマシンは64bitなのでこれらの変数は8byteです。つまり、8byteのデータを送信する必要があるのでバイトオーダーの変換をしようとしましたが、
バイトオーダー変換用の関数として#include <arpa.inet.h>に含まれている関数を探すとhtonsやhtonlぐらいで2byte,4byteを変換する関数しか見つかりませんでした。自作して使っても良いのですけど、なぜ8byte用が実装されていないのでしょうか?
32bitマシンとの通信ができないからという理由もありそうですが、そうだとしたら上記のstruct statはそのまま変換せずに最大4byteに各メンバ変数を調整するべきということでしょうか?
お聞きしたいこと
なぜ8byteのバイトオーダー変換は公に実装されていないのか?(あったとしても見つからない)
そもそも32bitマシンと64bitマシンは通信することはよくあるのか?
です。
まとまっていなくて申し訳ありませんが、もしここらへんの常識を教えていただけますなら宜しくおねがいします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/26 07:33