【问题标题】:Need help understanding what this function does需要帮助了解此功能的作用
【发布时间】:2019-01-16 01:09:26
【问题描述】:

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

【问题讨论】:

  • 您有什么特别想要的吗?它使用某些值填充 head[],具体取决于 row、col 和 num 的初始值。它使用一些神奇的数字来设置某些值,然后在日落时分离开。
  • 由于它是图像处理的一部分,它很可能正在读取文件的标题。确实,您需要使用调试器逐步完成它以查看发生了什么

标签: c++ file header


【解决方案1】:

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

标头被指定为具有大端顺序,您可以从大端情况下的代码的简单性看出 - 每个字段都是直接分配的。

对于 little-endian 情况,每个 int 中的字节必须颠倒。对于常量,这很容易,您只需重新排列十六进制值。对于传递给函数的整数,您必须将它们分成 4 个单独的字节并单独存储每个字节。

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2021-12-25
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多