2012-10-08 2 views
3

Это мой первый вопрос, поэтому, пожалуйста, будьте осторожны. :)создать растровое изображение без предупреждений

Я не специалист по программированию. У меня есть программа, с которой я играю. Он поставляется с некоторыми файлами 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-файлы?

Спасибо.

ответ

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}; 

но, кажется, немного более неловко мне

+0

Спасибо. Это сделал трюк. – hymie

Смежные вопросы