下面是一段获取 .NET 程序集构建时间的代码。注意这一行:
int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);
此代码提取存储在程序集中的结构TimeDateStamp
成员。IMAGE_FILE_HEADER
结构定义如下:
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
并DWORD
定义如下:
typedef unsigned long DWORD;
并且结构描述说这TimeDateStamp
是自过去任意时刻以来的秒数,所以它不能是负数。
为什么 C# 代码使用有符号类型int
来存储该无符号值?