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
位数为 .有什么问题?我得到结果的方式是假的吗?我通过使用按位运算符将变量移动得比它的可能大小更大。在保证变量的所有位都为零之后,我通过反转它得到了一个。并移动直到它变为零。如果我们移动它,我们得到一个零,所以我们可以从下面终止的循环的索引中获得位数。char
8
8
00000...
char
111...
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:为什么会有这些缺点?我的错误是什么?问题还不够清楚吗?也许我的问题很愚蠢,但为什么没有与我的问题相关的任何回应?char
8