我已经查找了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
我想帮助一些人试图了解这里发生了什么,以上字段代表什么;即偏移等意味着什么。
答案 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_time
,employee_id
,...)。
"偏移"指的是字节所在字符串的偏移量(位置)。