C# 为什么这段处理时间戳的代码使用带符号整数?
。请注意这一行:C# 为什么这段处理时间戳的代码使用带符号整数?,c#,c++,.net,C#,C++,.net,。请注意这一行: int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset); 此代码提取存储在程序集中的结构的TimeDateStamp成员。结构定义如下: typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD Pointe
int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);
此代码提取存储在程序集中的结构的TimeDateStamp成员。结构定义如下:
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;
typedef unsigned long DWORD;
DWORD的定义如下:
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;
typedef unsigned long DWORD;
结构描述说TimeDateStamp是过去任意时刻的秒数,所以它不能是负数
为什么C代码使用有符号类型int来存储无符号值?这是因为无符号int不是符合CLS的变量类型,所有.NET库都应该遵循公共语言规范 有关CLS合规性的更多信息:
从1970年1月1日午夜00:00:00起经过的秒数理论上可能是负数。虽然我认为在此之前实际构建的.NET程序集不多,但它也表示根据系统时钟。。。可能是在撒谎吗?@Rawling:PE文件格式肯定是在那一刻发明的。重点是,尽管我编辑了我的评论:如果这是非常古老的C,那么长是32位。但除此之外,主要的问题是为什么它使用Int32而不是Int64。在2030年左右,它实际上会溢出超过2^31秒,导致严重的软件故障……不符合CLS的情况如何/为什么会阻止您在本地以某种方法使用它?