了解Perl pack函数的内存分配表示

时间:2014-08-25 17:27:49

标签: perl memory-management

我已经查找了Perl包功能并遇到了this tutorial

所有看起来都不错,除非我到达有关如何在内存中保存信息的部分。

本教程确实说明第一行是十进制,第二行是十六进制,第三行是适用的字符,管道符号表示字段边界。

要打包的数据来自以下C结构:

struct SupplyRequest {
    time_t request_time;    // time request was entered
    int employee_id;        // employee making request
    char item[32];          // item requested
    short quantity;         // quantity needed
    short urgent;           // request is urgent
};

使用输入数据(完全从教程中引用):

“如果僧人号217641(嘿!那是我!)在2003年1月1日美国东部时间下午1点紧急订购两盒回形针,$ rec将包含以下内容(第一行为十进制,第二行为十六进制,第三行作为适用的字符。)管道字符表示字段边界。“

打包时,结果数据类似于以下内容:

Offset   Contents (increasing addresses left to right)
     0   160  44  19  62| 41  82   3   0| 98 111 120 101 115  32 111 102
          A0  2C  13  3E| 29  52  03  00| 62  6f  78  65  73  20  6f  66
                                        |  b   o   x   e   s       o   f

    16    32 112  97 112 101 114  99 108 105 112 115   0   0   0   0   0
          20  70  61  70  65  72  63  6c  69  70  73  00  00  00  00  00
               p   a   p   e   r   c   l   i   p   s

    32     0   0   0   0   0   0   0   0|  2   0|  1   0
          00  00  00  00  00  00  00  00| 02  00| 01  00

我想帮助一些人试图了解这里发生了什么,以上字段代表什么;即偏移等意味着什么。

1 个答案:

答案 0 :(得分:1)

字符串表示内存中以下结构的实例的表示。

struct SupplyRequest {
    time_t request_time;    // time request was entered
    int employee_id;        // employee making request
    char item[32];          // item requested
    short quantity;         // quantity needed
    short urgent;           // request is urgent
};

"字段"指结构的字段(request_timeemployee_id,...)。

"偏移"指的是字节所在字符串的偏移量(位置)。