我想了解此函数在C语言中的工作原理。我相信它可以用来帮助创建文件的标头,如文件名所示。这是处理图像处理的较大文件的一部分。但是,这部分代码是在处理完成之后:
void header( int row, int col, unsigned char head[32] )
{
int *p = (int *)head;
char *ch;
int num = row * col;
/* Choose little-endian or big-endian header depending on the machine. Don't modify this */
/* Little-endian for PC */
*p = 0x956aa659;
*(p + 3) = 0x08000000;
*(p + 5) = 0x01000000;
*(p + 6) = 0x0;
*(p + 7) = 0xf8000000;
ch = (char*)&col;
head[7] = *ch;
ch ++;
head[6] = *ch;
ch ++;
head[5] = *ch;
ch ++;
head[4] = *ch;
ch = (char*)&row;
head[11] = *ch;
ch ++;
head[10] = *ch;
ch ++;
head[9] = *ch;
ch ++;
head[8] = *ch;
ch = (char*)#
head[19] = *ch;
ch ++;
head[18] = *ch;
ch ++;
head[17] = *ch;
ch ++;
head[16] = *ch;
/*
// Big-endian for unix
*p = 0x59a66a95;
*(p + 1) = col;
*(p + 2) = row;
*(p + 3) = 0x8;
*(p + 4) = num;
*(p + 5) = 0x1;
*(p + 6) = 0x0;
*(p + 7) = 0xf8;
*/
}
答案 0 :(得分:0)
小端到大端是指将多字节值存储在内存中的方式。在低端字节序的计算机上,它从最低有效字节到最高有效字节,而在大端字节序的计算机上,则以相反的顺序进行。
标头被指定为大端顺序,正如在大端顺序情况下的代码简单性可以看出的那样-每个字段都直接分配。
对于小端的情况,每个int
中的字节必须颠倒。对于常数,这很容易,您只需重新排列十六进制值即可。对于传递给函数的整数,您必须将它们分成4个单独的字节,并分别存储每个字节。