Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这段处理时间戳的代码使用带符号整数?_C#_C++_.net - Fatal编程技术网

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的情况如何/为什么会阻止您在本地以某种方法使用它?