c ++:使用字节

use*_*677 3 c++ io numbers

我的问题是,我需要加载一个二进制文件并使用文件中的单个位.之后,我需要将其保存为字节.

我的主要问题是 - 选择使用什么数据类型 - char或long int?我可以以某种方式使用字符吗?

Ste*_*end 6

除非性能在这里是关键任务,否则使用任何使您的代码最容易理解和维护的东西.

  • +1并且如果可能不必重新发明轮子,如果您不必使用预定义的序列化格式,[不要发明一种](https://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats)。 (2认同)

dar*_*rak 5

在开始编码任何事情之前,请确保您了解endianess,c ++类型大小以及它们可能有多奇怪.

unsigned char是,大小是固定的(在机器的自然字节,通常为8位)的唯一类型.所以,如果你设计的便携性是一个安全的赌注.但是,使用unsigned int甚至是long long加速过程并使用size_of来查找每次读取中有多少位并不难,尽管代码变得更加复杂.

您应该知道,为了真正的可移植性,没有任何内部类型的c ++是固定的.unsigned char可能有9位,int可能小到0到65535范围内,如答案中所述

正如user1200129所建议的,另一种替代方案是使用boost整数库来减少所有这些不确定性.如果您的平台上有可用的增强功能.虽然如果要使用外部库,可以选择许多序列化库.

但是,在开始优化之前,首先要做一些简单的工作.然后,当您开始遇到计时问题时,您可以开始分析.