我从这里提出的一些问题中了解到 char
类型的原因是它在C中总是 1
字节,但是位数可能因系统而异 .
sizeof()
运算符使用 char
作为一个单位因此 sizeof(char)
总是 1
以字节为单位 . (它取本地机器的最小地址单位的位数)如果在二进制模式下使用 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();
除非始终以字节现有标准 8
位使用 char
,否则如果将一堆数据写入16位机器中的文件并在32位机器中读取会发生什么?或者我应该使用依赖于操作系统的文本模式?如果没有,我误解了什么是真理?
Edit : 我纠正了我的错误 .
谢谢你的警告 .
Edit2: 我的系统是 64
位但我得到 char
类型的位数为 8
. 有什么问题?我得到 8
错误的结果的方式是什么?通过使用按位运算符将 char
变量移动到可能的大小以上,我得到了一个 00000...
. 在保证变量的所有位都为零之后,我通过反转得到了 111...
. 移动直到它变为零 . 如果我们移动它 its size time
,我们得到一个零,所以我们可以从下面终止的循环的indice获得位数 .
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
类型是不同的数据类型,因为计算机处理文件流中的指针与标准 char
类型是不同的,这至少是 8
位?那么,背景究竟是怎样的呢?
Edit3: 为什么这些缺点?我的错是什么?问题不够明确吗?也许我的问题很愚蠢,但为什么没有任何与我的问题相关的回答?
1 回答
语言标准无法真正指定文件系统的功能 - 它只能指定语言与之交互的方式 . C和C标准也没有涉及与不同实现之间的互操作性或通信有关的任何事情 . 换句话说,除了这样说之外,对这个问题没有一般性的答案:
VAST大多数系统使用8位字节
C和C标准要求
char
至少为8位很可能大于8位的系统具有以某种方式利用(或至少转码)8位文件的机制 .