1

私は現在、ファイル形式についてさらに詳しく学ぼうとしています。

3Dファイル形式(この場合はU3D)の仕様があり、それを実装してみたいと思います。学習効果のためだけに、深刻なことは何もありません。

私の問題は、定義する必要のあるタイプから非常に早く始まります。さまざまな整数(8ビット、16ビット、32ビットの符号なしおよび符号付き)を定義する必要があり、ファイルに書き込む前にこれらを16進数に変換する必要があります。

I16 ieを作成することはできないので、これらのタイプをどのように定義しますか?私にとってのもう1つの問題は、そのI16を8桁の16進数(つまり0001 0001)に変換する方法です。

4

4 に答える 4

2

16 進数は単なる数値の表現です。数値を 2 進数、10 進数、16 進数、8 進数などとして解釈するかどうかは、あなた次第です。C++ では、10 進数、16 進数、および 8 進数の表現がサポートされていますが、それらはすべて同じ方法で格納されます。

例:

int x = 0x1;
int y = 1;
assert(x == y);

おそらくファイル形式では、ファイルを通常のバイナリ形式で保存する必要があります。ファイル形式が16進数を読み取り可能なテキスト文字列として望んでいるとは思いません。ただし、そうであれば、 std::hex を使用して変換を行うことができます。(例: file << hex << number;)

ファイル形式が 1 バイト以上の型をファイルに書き込むことについて言及している場合は、アーキテクチャのエンディアンに注意してください。つまり、マルチバイト型の最上位バイトを最初または最後に保存します。

ファイル形式の仕様では、バイナリがファイルの特定の部分をどのように探すべきかを示すことは非常に一般的です。ただし、これを実際に 2 進数を文字列として格納することと混同しないでください。同様に、16 進数でどのように見えるかを指定することで、ショートカットを提供することがあります。繰り返しますが、ほとんどの場合、実際にはテキスト文字列を意味するわけではありません。

C++ でアドレス可能な最小単位charは 1 バイトです。&そのバイト内にビットを設定する場合は、 や などのビット単位の演算子を使用する必要があります|。ビット演算子に関するチュートリアルはたくさんあるので、ここでは詳しく説明しません。

于 2010-06-04T15:33:04.683 に答える
1

含めると、<stdint.h>次のようなタイプが得られます。

uint8_t
int16_t
uint32_t
于 2010-06-04T15:42:12.623 に答える
0

まず、理解させてください。整数は、プレフィックス 0x なしで、16 進形式でファイルに AS TEXT として保存されますか?

次に、次の構文を使用します。

fprintf(fp, "%08x", 数値);

0abc1234 をファイルに書き込みます。

于 2010-06-04T15:34:06.120 に答える
0

「異なる整数(8ビット、16ビット、32ビットの符号なしおよび符号付き)を定義する」に関しては、独自の整数をロールし、それらに付随する数学演算を行わない限り、システムが提供するタイプに固執する必要があります。int32_t などの使用可能な typedef については、stdint.h を参照してください。

于 2010-06-04T15:40:19.553 に答える