2012-09-28 62 views
1

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來存儲該無符號值?

+4

「自午夜(00:00:00),1970年1月1日,經過秒數」在理論上必須是負數。 (雖然我認爲在那之前並不是很多.NET程序集,但它也會說「根據系統時鐘」......可能在說什麼?) – Rawling

+0

@Rawling:PE文件格式肯定是在那一刻發明的。 – sharptooth

+0

點了,雖然我編輯了我的評論:) – Rawling

回答

0

這是因爲unsigned int不是符合CLS的變量類型,所有.NET庫都應遵循Common Language Specification。關於CLS遵從

更多信息:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

+0

如何/爲什麼非CLS遵從性會阻止你在方法中在本地使用它嗎? –

相關問題