在POSIX tar存档格式here的GNU规范中,标头结构定义为:
struct posix_header
{ /* byte offset */
char name[100]; /* 0 */
char mode[8]; /* 100 */
char uid[8]; /* 108 */
char gid[8]; /* 116 */
char size[12]; /* 124 */
char mtime[12]; /* 136 */
char chksum[8]; /* 148 */
char typeflag; /* 156 */
char linkname[100]; /* 157 */
char magic[6]; /* 257 */
char version[2]; /* 263 */
char uname[32]; /* 265 */
char gname[32]; /* 297 */
char devmajor[8]; /* 329 */
char devminor[8]; /* 337 */
char prefix[155]; /* 345 */
/* 500 */
};
标头的size
字段被定义为长度为12的char数组,该字段的字节长度似乎为12个字节(由字节偏移注释推断)。理论上,这提供了12个字节(= 96位)的空间来存储无符号整数。但是,我怀疑情况并非如此。
答案 0 :(得分:2)
name
,linkname
,magic
,uname
和gname
是以空字符结尾的字符串。所有其他字段均为ASCII格式的零填充八进制数。 由于历史原因,还应使用最终的NUL或空格字符。
因此,11个字节为您提供11个八进制数字(0..77777777777 8 或0..0x1FFFFFFFF范围),您的程序需要按照自己认为合适的方式将其转换为二进制表示形式-例如,这样:
uint64_t size;
sscanf(header->size, "%" SCNo64 "", &size);
答案 1 :(得分:0)
标头中的每个字段都存储为以空终止的字符串。如果是文件大小,则将其存储为八进制字符串。
因此,您总共有11个八进制字符(为空字节留有余地),意味着文件大小为33位,即8GB。