我从这里提出的几个问题中了解char
类型的是C ++中它总是1
个字节,但是位数可能因系统而异。
sizeof()
运算符使用char
作为单位,因此sizeof(char)
始终为1
,以C ++为单位。(它取本地机器的最小地址单位的位数)如果在二进制模式中使用fstream()
的文件函数时,我们直接读取和写入RAM中任何变量的地址,变量的大小作为写入的最小数据单位file应该是从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
1}}通过反转它。移位直到它变为零。如果我们移位它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;
,我们得到一个零,所以我们可以从下面终止的循环的indice获得位数。
i
循环后char
变量的值是8
类型中的位数。根据此,结果为char
。
我的最后一个问题是:
文件系统字节和char
是否输入不同的数据类型,因为计算机在文件流中的地址指针与至少8
位的标准{{1}}类型不同?
那么,背景究竟是怎样的呢?
编辑3:为什么这些缺点?我的错是什么?问题不够明确吗?也许我的问题很愚蠢,但为什么没有任何与我的问题相关的回应呢?
答案 0 :(得分:2)
语言标准无法真正指定文件系统的功能 - 它只能指定语言与之交互的方式。 C和C ++标准也没有涉及与不同实现之间的互操作性或通信有关的任何事情。换句话说,除了这样说之外,对这个问题没有一般性的答案:
char
至少为8位