warning: C4305从“int”到“char” 截断

  有时候想打印出一些特殊符号来组成图像的时候,会遇到这种问题:特殊字符无法赋值给char型字符。这时候有两种解决办法。

  方法一:将char型改为string型。(#include <string>)

  一般来说,没办法赋值给char型是因为这个特殊符号虽然看上去只有一个字符,但实际上它所占的空间是一个字符串。如下图所示:

warning: C4305从“int”到“char” 截断

   将普通字符以字符的形式赋值给s1,特殊字符以字符的形式赋值给s2,然后再将特殊字符以字符串的形式赋值给s3。运行结果却如下图:

warning: C4305从“int”到“char” 截断

  s1、s3成功输出,s2却被告知 从“int”到“char” 截断,可见,字符是可以赋值给string型的,特殊符号★也可以以字符串的形式赋值给string。所以,这个特殊符号应该是一个字符串,而不是一个字符。

  但是,一般用到特殊字符都是用char型的二维数组来组成图像的,特地将其中的几个char型字符换成string型字符串,不是不行,但是太麻烦了。于是还有第二种方法。

  方法二:用ASCII码。

  有人会说了,没用,ASCII码表里没有特殊字符。的确没有,但是扩展ASCII码表里面有特殊字符,尽管不是很全,但是常用的特殊字符还是有包含几个的。话不多说,开始操作。

  首先,查找该字符在扩展ASCII码表里的值。

  warning: C4305从“int”到“char” 截断

warning: C4305从“int”到“char” 截断

  然后用其ASCII码值代替字符赋值给char型字符变量。

warning: C4305从“int”到“char” 截断

  然后调试。这时候你会发现,出现的窗口,要么什么都没有,要么就是特殊字符被一些奇怪的中文代替了。这时候鼠标在调试窗口的标题栏单击右键,选择“默认值”,将里面的默认代码页改成437-(OEM/美国)即可。

warning: C4305从“int”到“char” 截断

warning: C4305从“int”到“char” 截断

  上面第一图就是改成美国代码页后的效果。



相关连接:

扩展ASCII码对照表

参考文章:

ASCII码128-255扩展编码显示奇葩中文的原因(by 残烛之泪)