为什么处理时间戳的代码使用有符号整数?

时间:2012-09-28 09:42:03

标签: c# c++ .net

Here's a piece of code for obtaining the time when a .NET assembly was built。请注意这一行:

int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);

此代码提取存储在程序集中的IMAGE_FILE_HEADER结构的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;

DWORD定义如下:

typedef unsigned long DWORD;

并且结构描述表明TimeDateStamp是过去任意时刻以来的秒数,所以它不会是负数。

为什么C#代码使用签名类型int来存储该无符号值?

1 个答案:

答案 0 :(得分:0)

这是因为unsigned int不是符合CLS的变量类型,并且所有.NET库都应遵循公共语言规范。

有关CLS合规性的更多信息:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx