C++相談室 part87
レス数が900を超えています。1000を超えると表示できなくなるよ。
0923デフォルトの名無しさん
2011/02/06(日) 01:59:40以下の質問では、より良い標準的な方法があったらそれも教えてください(例えばmemcpy関数じゃなくてこっちのほうが標準的でいいよ的な)
沢山質問してしまいますがよろしくお願いします。
0, (そもそもこういう処理のためのライブラリがあったりしませんか?スレチ気味ですが)
1, ヘッダ部を処理するために例えば
struct Header{
unsigned char sign[8]; //8bytes
unsigned char datasize[8]; //8bytes
};
Header hdr = {0};
のような構造体を定義します。
まず、特定のバイト数を確保する際のやりかた(ここでは8バイト)はこれでいいのでしょうか?
2, 1,で定義した構造体のメンバにあるバイト列を代入する場合どうすればよいのでしょうか?
例えば代入元がUINT128(適当ですからなかったらすいません)の場合は、
UINT8 i = 234;
memcpy(hdr.datasize,&i,sizeof(UINT128));
でいいんでしょうか?
memcpyでサイズが違うものに使ったことがなく不安です。例えば、
コピー元(UINT128=16バイト): 0xFF 00 00 00 00 (略) 00 AA BB CC
の時memcpyで8バイトコピーしたら、コピー先は0x00 00 00 00 00 AA BB CCってことでいいんですか?
つまりmemcpyの起点はいったいどうなってるんですか?
3, boost::FileSystem::file_sizeがuintmax_tの返り値をくれるんですが、これはどうやって1の構造体に代入すれば?
sizeofで実行時にサイズを計算して、8バイトと比べて小さい方をmemcpy?
4, wchar_t* なんかもそのままmemcpyで大丈夫ですか?
5, できあがったhdrをメンバ変数を一つづつファイル出力するとして
選択1: C++のfstream; 選択2: Cのread&write; 選択3: win32api(低水準)
巨大なバイナリ列を扱う時の、定番の入出力法はなんなんでしょう?ちまたのアーカイバはどうしてるんですか?
なお、fstreamに渡すときは(char*)にキャストしてバイト数指定でいいですよね? 強制的にリトルエンディアンですか?
レス数が900を超えています。1000を超えると表示できなくなるよ。