c++ - 文件格式中的整数类型

标签 c++ integer bit u3d

我目前正在尝试学习一些更深入的文件格式知识。

我有一个 3D 文件格式规范(在本例中为 U3D),我想尝试实现它。没什么大不了的,只是为了学习效果。

我的问题很早就开始于需要定义的类型。我必须定义不同的整数(8 位、16 位、32 位无符号和有符号),然后需要将这些整数转换为十六进制,然后再将其写入文件。

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

最佳答案

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

例子:

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

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

如果文件格式谈到将超过 1 字节的类型写入文件,那么请注意 Endianness你的架构。这意味着您将多字节类型的最高有效字节存储在最前面还是最后。

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

C++ 中最小的可寻址单元是 char这是1个字节。如果要在该字节内设置位,则需要使用像 & 这样的位运算符。和 | .位运算符的教程很多,这里不再赘述。

关于c++ - 文件格式中的整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2975542/

相关文章:

java - Java 中的位 & (AND) 是如何工作的?

c++ - 为什么这会/而永远不会结束?

C++:将十六进制转换为十进制

string - 为什么要测试这些数字 (2^16, 2^31 ....)

vb.net - 检查字符串变量是否具有整数值

c# - 测试按位枚举值

c++ - 从缓冲区输入的位

c++ - 为什么执行者不在 Concurrency TS 和 std::future 接口(interface)中了?

c++ - 如何创建具有固定列长和动态行长的二维 vector ?

仅用一个整数表示一组整数的算法