-4

char从这里提出的几个问题中,我对类型的理解是,它1在 C++ 中始终是字节,但位数可能因系统而异。

sizeof()运算符char用作一个单位,因此sizeof(char)始终1以 C++ 的字节为单位。(它采用本地机器地址的最小单位的位数)如果fstream()二进制模式下使用文件函数时,我们直接读取和写入任何地址RAM 中的变量,作为写入文件的最小数据单位的变量的大小应该是从 RAM 读取的值的大小,对于从文件读取的值,反之亦然。那么我们可以说如果尝试这样的事情,数据可能不会8按位写入:8

ofstream file;
file.open("blabla.bin",ios::out|ios::binary);
char a[]="asdfghjkkll";
file.seekp(0);
file.write((char*)a,sizeof(a)-1);
file.close();

除非char总是以字节为单位使用现有的标准8位,否则如果将一堆数据写入 16 位机器中的文件并在 32 位机器中读取,会发生什么情况?或者我应该使用依赖于操作系统的文本模式?如果不是,我误解了什么是真理?


编辑:我已经纠正了我的错误。
感谢您的警告。


Edit2:我的系统有点,但我得到的类型64位数为 .有什么问题?我得到结果的方式是假的吗?我通过使用按位运算符将变量移动得比它的可能大小更大。在保证变量的所有位都为零之后,我通过反转它得到了一个。并移动直到它变为零。如果我们移动它,我们得到一个零,所以我们可以从下面终止的循环的索引中获得位数。char8800000...char111...its size time

char zero,test;
zero<<=64; //hoping that system is not more than 64 bit(most likely)
test=~zero; //we have a 111...
int i;
for(i=0; test!=zero; i++)
 test=test<<1;

循环后变量的值i是类型中的位数。char据此,结果是8。我的最后一个问题是:文件系统字节和类型是否是不同的数据类型,因为计算机如何处理文件流char中的指针与至少为位的标准类型不同?那么,到底发生了什么? Edit3:为什么会有这些缺点?我的错误是什么?问题还不够清楚吗?也许我的问题很愚蠢,但为什么没有与我的问题相关的任何回应?char8

4

1 回答 1

2

语言标准不能真正指定文件系统的作用——它只能指定语言如何与之交互。C 和 C++ 标准也没有解决与不同实现之间的互操作性或通信有关的任何问题。换句话说,除了说:

  • VAST 大多数系统使用 8 位字节
  • C 和 C++ 标准要求char至少为 8 位
  • 大于 8 位的系统很可能具有以某种方式利用(或至少转码)8 位文件的机制。
于 2013-07-17T17:39:31.693 回答