C++ 需要帮助了解此函数的功能吗

C++ 需要帮助了解此函数的功能吗,c++,file,header,C++,File,Header,我想了解这个函数在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

我想了解这个函数在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;
    */
}

Little endian vs.big endian是指多字节值存储在内存中的方式。在小端机器上,它从最低有效字节到最高有效字节,而大端机器的顺序相反

标头被指定为具有大端顺序,正如您可以从大端顺序的代码的简单性中看出的,每个字段都是直接赋值的


对于小尾端的情况,每个
int
中的字节必须反转。对于常量,这很简单,只需重新排列十六进制值。对于传递给函数的整数,必须将其拆分为4个单独的字节并分别存储

你有什么特别想要的吗?它用特定的值填充head[],这取决于row、col和num的初始值。它使用一些幻数来设置特定的值,并在日落时消失。由于它是图像处理的一部分,很可能是读取文件的头。实际上,您需要使用调试器逐步完成它,以查看发生了什么