整数文件格式的类型

时间:2010-06-04 15:27:22

标签: c++ integer bit u3d

我目前正在尝试更深入地学习文件格式。

我有一个3D文件格式的规范(在这种情况下是U3D),我想尝试实现它。没有什么是严肃的,只是为了学习效果。

我的问题很早就开始了需要定义的类型。我必须定义不同的整数(8Bit,16bit,32bit无符号和有符号),然后在将其写入文件之前需要将它们转换为十六进制。

我如何定义这些类型,因为我不能只创建一个I16,即? 对我来说另一个问题是如何将I16转换为8位数的十六进制数 (即0001 0001)。

4 个答案:

答案 0 :(得分:2)

Hex只是数字的表示。是否将数字解释为二进制,十进制,十六进制,八进制等取决于您。在C ++中,您支持十进制,十六进制和八进制表示,但它们都以相同的方式存储。

示例:

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

可能文件格式要求您以正常的二进制格式存储文件。我认为文件格式不要将十六进制数字作为可读文本字符串。如果确实如此,那么您可以使用std :: hex为您进行转换。 (例如:file << hex << number;

如果文件格式涉及向文件写入多于1字节的类型,那么请注意您的架构的Endianness。这意味着您首先或最后存储多字节类型的最重要字节。

在文件格式规范中,通常会向您展示二进制文件应该如何查找文件的给定部分。尽管实际上将二进制数字存储为字符串,但不要混淆。同样,他们有时会通过在十六进制中指定它的外观来为此提供一个快捷方式。大多数情况下,它们实际上并不意味着文本字符串。

C ++中最小的可寻址单元是char,它是1个字节。如果要在该字节内设置位,则需要使用&|等按位运算符。关于按位运算符的教程很多,所以我不会在这里详细介绍。

答案 1 :(得分:1)

如果您加入<stdint.h>,您将获得以下类型:

uint8_t
int16_t
uint32_t

答案 2 :(得分:0)

首先,让我理解。 整数以文本格式存储在文本中,格式为十六进制,没有前缀0x?

然后,使用以下语法:

fprintf(fp,“%08x”,数字);

将0abc1234写入文件。

答案 3 :(得分:0)

至于“定义不同的整数(8Bit,16bit,32bit unsigned and signed)”,除非你为它们进行自己的和伴随的数学运算,你应该坚持使用系统提供的类型。有关可用的typedef,请参阅stdint.h,例如int32_t。