相关疑难解决方法(0)

什么平台有8位字符以外的东西?

不时有人在SO上指出char(也就是"字节")不一定是8位.

似乎8位char几乎是通用的.我原本认为,对于主流平台,必须有一个8位char才能确保其在市场上的可行性.

现在和历史上,哪些平台使用的char不是8位,为什么它们与"普通"8位不同?

在编写代码时,考虑跨平台支持(例如,对于通用库而言),对于非8位平台,值得考虑的是什么char?

在过去,我遇到过一些char16位的ADI DSP .我认为DSP是一种利基架构.(然后,当时手工编写的汇编程序很容易击败可用的C编译器可以做的事情,所以我在该平台上没有真正获得C的经验.)

c c++ cross-platform

133
推荐指数
8
解决办法
2万
查看次数

`char`总是总是有8位吗?

我一直认为:

  1. a char由一个字节表示,
  2. 一个字节总是可以指望有8位,
  3. 这sizeof (char)总是1,
  4. 并且我可以分配的最大理论内存量(以chars 计)是RAM的字节数(+交换空间).

但是现在我已经阅读了维基百科条目,我不再那么肯定了.

我的假设中有哪一个是错的?哪一个是危险的?

c memory

41
推荐指数
4
解决办法
1万
查看次数

单字节布尔.为什么?

在C++中,为什么bool需要一个字节来存储true或false,其中只有一个位足够,例如0表示false,1表示true表示?(为什么Java也需要一个字节?)

其次,使用以下内容会更安全多少?

struct Bool {
    bool trueOrFalse : 1;
};
Run Code Online (Sandbox Code Playgroud)

第三,即使它是安全的,上述现场技术真的会有所帮助吗?因为我听说我们在那里节省空间,但是编译器生成的代码访问它们比访问基元所生成的代码更大更慢.

c++ java performance primitive boolean

41
推荐指数
4
解决办法
6911
查看次数

可移植代码 - 每个字符的位数

我知道C/C++标准只能保证每个字符最少 8位,理论上9/16/42 /其他任何东西都是可能的,因此所有关于编写可移植代码的网站都会警告不要假设8bpc.我的问题是"非便携式"这是真的吗?

让我解释.在我看来,有三类系统:

  1. 计算机 - 我的意思是台式机,笔记本电脑,服务器等,运行Mac/Linux/Windows/Unix/*nix/posix /等等(我知道这个列表并不严格,但你明白了).听到任何这样的系统char不完全是 8位,我会感到非常惊讶.(如果我错了,请纠正我)
  2. 带操作系统的设备 - 包括智能手机和此类嵌入式系统.虽然我发现这样一个系统的char位数比8位多,我不会感到非常惊讶,但我还没有听说过一个这样的系统(如果我不知道的话,请再次通知我)
  3. 裸机设备 - 录像机,微波炉,旧手机等.在这个领域我没有丝毫的经验,所以任何事情都可能发生在这里.但是,我真的需要我的代码在我的Windows桌面和微波炉之间跨平台吗?我可能有两个共同的代码吗?

底线:是否有共同的(大于%0.001)平台(在类别1和2以上),其中char是不是 8位?我的上述猜测是真的吗?

c c++ bits char

27
推荐指数
2
解决办法
6086
查看次数

字节总是8位吗?

当我阅读以下摘录时,我正在研究计算系统的要素:

Hack计算机包括一个黑白屏幕,组织为256行,每行512像素.屏幕内容由8K存储器映射表示,该映射从RAM地址16384(0x400)开始.物理屏幕中的每一行,从屏幕的左上角开始,在RAM中由32个连续的16位字表示.因此,来自顶部的行r和来自左边的列c的像素被映射到位于RAM [16384 + r*32 + c%16]的字的c%16位(从LSB到MSB计数).为了写入或读取物理屏幕的像素,可以在RAM驻留存储器映射中读取或写入相应的位(1 =黑色,0 =白色).

那么,如果屏幕是256行512像素,并且每个像素是一个比特,那么整个屏幕的8K内存映射怎么样?

256行*512位= 131072/8位/字节/ 1024字节/ K = 16K

那不是一张16K的内存映射吗?

我唯一能想到的是因为字大小是16位,这可能是一个因素吗?我一直都知道"字节"意味着8位,但如果它的定义取决于计算机的字大小,那么这对我来说可能会解开这个谜团.有人可以向我解释该段中描述的屏幕是如何用8K内存映射而不是16K表示的吗?

byte bits

19
推荐指数
1
解决办法
3万
查看次数

int8_t vs char; 哪个最好?

我的问题可能会让你感到困惑,我知道两者都是不同的类型(signed char和char),但我的公司编码指南指定使用int8_t而不是char.

所以,我想知道,为什么我必须使用int8_t而不是char类型.有没有最好的做法int8_t?

c c++ char

12
推荐指数
2
解决办法
4万
查看次数

字符串需要多少字节?一个炭?

我正在复习我的第一学期C++课程,我想我错过了一些东西.字符串占用多少字节?一个炭?

我们给出的例子是,一些是字符文字,一些是字符串:

'n', "n", '\n', "\n", "\\n", ""

我对那里的换行线的使用感到特别困惑.

c++ string character

10
推荐指数
4
解决办法
6万
查看次数

使程序在"机器字节"中具有不同位数的机器之间移植

我们都是便携式C/C++程序的粉丝.

我们知道sizeof(char)或sizeof(unsigned char)总是1"字节".但是1"字节"并不意味着具有8位的字节.它只是一个"机器字节",其中的位数可能因机器而异.看到这个问题.


假设您将ASCII字母"A"写入文件中foo.txt.这些天,在任何普通机器上都有一个8位机器字节,这些位将被写出来:

01000001
Run Code Online (Sandbox Code Playgroud)

但是如果要在具有9位机器字节的机器上运行相同的代码,我想这些位将被写出来:

001000001
Run Code Online (Sandbox Code Playgroud)

更重要的是,后一台机器可以将这9位写为一个机器字节:

100000000
Run Code Online (Sandbox Code Playgroud)

但是如果我们要在前一台机器上读取这些数据,我们就无法正常工作,因为没有足够的空间.不知何故,我们必须首先读取一个机器字节(8位),然后以某种方式将最后的1位变换为8位(机器字节).


程序员如何正确地协调这些事情?

我问的原因是我有一个编写和读取文件的程序,我想确保它不会在5年,10年,50年后中断.

c c++

10
推荐指数
1
解决办法
827
查看次数

使用'sizeof(char)'动态分配'char'冗余时?

在动态分配chars时,我总是这样做:

char *pCh = malloc(NUM_CHARS * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

然而,我最近被告知,使用sizeof(char)是冗余和不必要的,因为"根据定义,a的大小char是一个字节",所以我应该/可以像这样编写上面的行:

char *pCh = malloc(NUM_CHARS);
Run Code Online (Sandbox Code Playgroud)

我的理解是char的大小取决于目标计算机上使用的本机字符集.例如,如果本机字符集是ASCII,则a char是一个字节(8位),如果本机字符集是UNICODE,char则必然需要更多字节(> 8位).

为了提供最大的可移植性,是不是必须使用sizeof(char),因为malloc只需分配8位字节?我误解malloc和sizeof(char)?

c unicode malloc ascii char

10
推荐指数
2
解决办法
709
查看次数

*可能*未签名的字符等于EOF?

当fgetc用于读取流的下一个字符时,通常会检查是否未达到文件结尾

if ((c = fgetc (stream)) != EOF)
Run Code Online (Sandbox Code Playgroud)

哪里c是int类型.然后,文件结束已经达到并且条件将失败,或者c应该是unsigned转换为的char int,预期与EOF-c 不同,因为EOF确保为负.很好......显然.

但是有一个小问题......通常char类型不超过8位,而且int必须至少有16位,所以每个unsigned char都可以表示为int.然而,在这种情况下char会有16或32位(我知道,在实践中情况从来都不是这样......),没有理由为什么人们不能拥有sizeof(int) == 1,所以它(理论上!)可能fgetc (stream)返回EOF(或另一个负值)但文件结尾尚未达到......

我错了吗?如果没有达到文件结尾,C标准中是否会阻止fgetc返回EOF?(如果是的话,我找不到它!).或者if ((c = fgetc (stream)) != EOF)语法不完全可移植?...

编辑:的确,这是问题#3860943的重复.我在第一次搜索时没有找到这个问题.谢谢您帮忙!:-)

c unsigned char eof fgetc

10
推荐指数
1
解决办法
373
查看次数

标签 统计

c ×7

c++ ×6

char ×4

bits ×2

ascii ×1

boolean ×1

byte ×1

character ×1

cross-platform ×1

eof ×1

fgetc ×1

java ×1

malloc ×1

memory ×1

performance ×1

primitive ×1

string ×1

unicode ×1

unsigned ×1