我的任务是在Qt中实现JPEG编码器/解码器。我必须处理jpeg标记(例如0xFFC4,这是霍夫曼表的开始)和标记之间的数据。我使用QFile类打开我的jpeg文件。调试结果时如下图所示。你可以看到marker [0]中的值是-1/255而marker [1]是-40/216,而if语句永远不是真的我不知道为什么?代码如下:
try{
char markers[2];
char TableData[64];
QFile *file= new QFile( "NovaSlika.jpeg");
if(file->open(QFile::ReadOnly )){
while(file->read((char*)markers,sizeof(markers))){
if(markers[0]=='255' && markers[1]=='216'){//FF i C4
char TableLength[2];
char tableMetaData;
file->read((char*)TableLength,sizeof(TableLength));//Read table length
file->read((char*)tableMetaData,sizeof(tableMetaData));//Read metadata
file->read((char*)TableData,sizeof(TableData));//Read data
break;
}
}
}
调试过程的图片为here
答案 0 :(得分:1)
小心条件:read()返回
您应该这样做:
while( file->read( (char*)markers, sizeof(markers) ) == 2 )
这条线也不对:
markers[0]=='255' && markers[1]=='216'
摆脱那些单引号。 (-gall on gcc会警告你)。它应该是:
markers[0]==255 && markers[1]==216