我试图在下面的代码中打印一个正方形标记:
代码1:
char* exp = new char[300];
*(exp) = 178// which is 2's extended ascii code
*(exp+1) = '\0'// end of string
printf("%s",exp);`
它会打印"?“
似乎小2会自动加入下一个字母:
代码2:
char* exp = new char[300];
*(exp) = 178// which is 2's extended ascii code
*(exp+1) = '4'// or anything '5' 'a' '#'...
*(exp+2) = '\0'// end of string
printf("%s",exp);
它会打印一个中文单词,也许不会,但真的很喜欢。
该怎么办?我只想打印“小2”。
PS:
在WindowsXP控制台中,非常感谢您的帮助。
发布于 2011-02-13 22:52:39
ASCII字符集只包含英文字母、数字和其他一些字符,但没有什么像方形符号、钻石或俱乐部之类的花哨符号。这些字符在ASCII规范之外,取决于读取输出的人将接受哪种编码。还有所有非英语字符(如中文、日文、俄文、北欧重音字母、希伯来文、.)在ASCII规范之外。
当计算机产生一些输出时,您可以放心地假设,如果您只使用ASCII子集,您的字节将是明确的(曾经,使用不同的编码是很普遍的,即使只是英文字母,但现在大多数时间已经过去了)。但是,如果输出包含高于127的任何字节,则解释取决于读取器将考虑哪种编码。
非常常见的编码是拉丁文-1( is 8859-1),其中平方符号是代码178,CP850 (DOS),其中平方符号是253,或者UTF-8,其中平方符号是序列194+178。
考虑到终端显示的是汉字,我猜可能是将输出解释为UTF-8,因为这是一种对每个字符使用可变字节数的编码,但它能够表示任何unicode字符;iso-8859-1和cp850都不能表示汉字。
然而,这只是猜测,因为还有其他非常常见的编码,例如日语字符.(轮班-JIS)
发布于 2011-02-13 22:18:30
以下是打印上标2的三种不同方法:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(int argc, char** argv)
{
setlocale(LC_CTYPE, "");
wchar_t *foo = L"²";
wprintf(L"%ls\n", foo);
wprintf(L"²\n");
wchar_t bar[2];
bar[0] = 178;
bar[1] = 0;
wprintf(L"%ls\n", bar);
return 0;
}
发布于 2011-02-13 22:09:32
178在ASCII表中不是一个小的两个,它是一个块。不是更像253吗?
此外,数字转换为字符的方式取决于您使用的平台。但你对此只字未提。
https://stackoverflow.com/questions/4989301
复制相似问题