编译器如何标识多个字符的ASCII代码
How compiler identifies the ASCII code of multiple characters
int var;
var=' '; // this is a single space
cout << var; // prints 32
var = ' '; // double space
cout << var; // prints 8224. Why?
编译器如何计算两个空间的(8224)?
这都会发生在每个多字符文字中。
这是C 标准N3690提到的有关多学术文字的内容:
一个普通字符字面包含一个以上的C-char是多章字面的字面。多曲目文字或一个普通字符字面包含一个Char在执行字符中不可用的单个C-Char 设置,有条件地支撑,具有INT类型,并且具有实现定义的值。
因此,答案是相应的int值是实现特异性。
对于单char文字:
在执行字符集中包含一个可表示的单个c-char的普通字符具有类型char,值等于执行字符集中c-char的编码的数值。
c 中的char是 byte (具有 0 的可能INT值,到 255 )。因此,在您的情况下,当您将两个白色空间施放到一个int上时,在场景后面只是 base-256转换。更准确:
- 白色空间'的ASCII为32。
- 所以,两个白空间将被施放为:32 256*32 = 8224。
编辑
- 这是您的两个字符在内存中表示的方式,其中一个字节是一个字节,它的值可以在0-255中的值: | char |char | 。
- 当您将这两个块投入到一个int时,您会进行基本256转换,即右char块的ASCII,即32我们乘以256^0。然后是下一个char块的ASCII,即32我们乘以256^1。
-
步骤2。是实现依赖性 as @saurav-sahu提到,例如如果是大的endian或小末日。
-
我试图为您提供系统背后的内容的直觉,但是正如Pete_Becker正确指出的那样,它是高度实现的特定于,例如。Char类型可以解释为签名或未签名的值,依此类推。
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- RE2 不匹配非 ASCII 字符
- 打印从 0 到 255 的所有 ASCII 字符
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- 无符号字符打印其 ASCII 值
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 在结构数据类型中更改每个字符的 ASCII 值
- Cin 和 getline 无法正确保存非 ascii 字符
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 非ASCII字符的词典排序
- 将char类型指定给int以打印相应的ASCII字符
- 将非 ASCII 字符转换为英语对应字符C++
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- C++ UTF-8 瑞典语字符读取为 ASCII
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 如何遍历所有 ASCII 字符?
- 读取字符 ASCII 值并将其记录到矢量
- 如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)