这是我的第一个问题,所以请保持温柔。 :)
我不是编程专家。我有一个我正在玩的节目。它附带了一些BMP文件。我仍然有BMP文件,但我将它们转换为C代码。目前,我正在加载它们:
static char bits[] = {
0xff,0xff,0xff,0xff,0xff,0xab,0xaa,0x5a,0x55,0xd5,0x55,0x55,0xb5,0xaa,0xaa,
0xab,0xaa,0x5a,0x55,0xd5,0x55,0x55,0xb5,0xaa,0xaa,0xab,0xaa,0x5a,0x55,0xd5,
[blah blah blah]
0xff,0xff,0xff,0xff,0xff};
walls.pixmap = XCreateBitmapFromData(dpy,DefaultRootWindow(dpy),bits,40,40);
每个大于0x80的字符都会生成此警告:
bitmaps.c:38: warning: overflow in implicit constant conversion
所以我尝试将我的定义改为
static unsigned char bits[] = {
但显示新警告:
bitmaps.c:31: warning: pointer targets in passing argument 3 of 'XCreateBitmapFromData' differ in signedness
/usr/include/X11/Xlib.h:1607: note: expected 'const char *' but argument is of type 'unsigned char *'
有没有办法加载将在没有警告的情况下编译的位图?我应该接受警告会一直出现吗?我是否应该做一些不同的事情,因为我还有原始的BMP文件?
感谢。
答案 0 :(得分:1)
使用无符号字符应该可以防止警告。
签名字符实际上不能代表文字(类型为int
,而不是char
)。
static unsigned char bits[] = {
0xff,0xff,0xff,0xff,0xff,0xab,0xaa,0x5a,0x55,0xd5,0x55,0x55,0xb5,0xaa,0xaa,
0xab,0xaa,0x5a,0x55,0xd5,0x55,0x55,0xb5,0xaa,0xaa,0xab,0xaa,0x5a,0x55,0xd5,
/* [blah blah blah] */
0xff,0xff,0xff,0xff,0xff};
walls.pixmap = XCreateBitmapFromData(dpy,DefaultRootWindow(dpy),(char*) bits,40,40);
换句话说,你也可以明确地演绎每个文字:
static char bits[] = {
(char)0xff,(char)0xff,(char)0xff,(char)0xff,(char)0xff,(char)0xab,(char)0xaa,(char)0x5a,(char)0x55,(char)0xd5,(char)0x55,(char)0x55,(char)0xb5,(char)0xaa,(char)0xaa,
(char)0xab,(char)0xaa,(char)0x5a,(char)0x55,(char)0xd5,(char)0x55,(char)0x55,(char)0xb5,(char)0xaa,(char)0xaa,(char)0xab,(char)0xaa,(char)0x5a,(char)0x55,(char)0xd5,
/* [blah blah blah] */
(char)0xff,(char)0xff,(char)0xff,(char)0xff,(char)0xff};
但这对我来说似乎有点尴尬