gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:10:41 26 4
gpt4 key购买 nike

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

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com