我正在嘗試將一個.Net代碼片段調整到古老的C,而不需要大量使用C++ .Net類。它看起來像這樣:相當於C的日期時間
Int64 ticks = DateTime.Now.ToBinary();
WriteSigned64(address, ticks);
在C/C++編譯的Win32進程中是否存在等價物?我發現的唯一的東西使用替代和有限的32位結構。我也必須寫這個字段與.Net版本兼容。
我正在嘗試將一個.Net代碼片段調整到古老的C,而不需要大量使用C++ .Net類。它看起來像這樣:相當於C的日期時間
Int64 ticks = DateTime.Now.ToBinary();
WriteSigned64(address, ticks);
在C/C++編譯的Win32進程中是否存在等價物?我發現的唯一的東西使用替代和有限的32位結構。我也必須寫這個字段與.Net版本兼容。
您可以使用在time.h
中聲明的函數time_t time(time_t *t);
。它給你從Epoch(1970-01-01 00:00:00 +0000(UTC))開始的秒數。
time_t
全部合理近期版本是64位整數。
這是一個C函數,但它可以從C++程序調用。
並且轉換爲'DateTime'兼容的刻度編號,乘以'10000000'並添加'621355968000000000'。 – 2014-09-29 22:12:34
沒有任何直接的方式來做你所問的問題,並且它仍然執行與你提供的代碼完全相同的方式。
DateTime.ToBinary()
不只是蜱蟲。它將DateTime
對象的Ticks
和Kind
屬性編碼爲單個二進制值。請參閱documentation on MSDN。你也可以參考.NET Reference Source。
爲了說明這一點,考慮下面的C#代碼:
DateTime dt = DateTime.Now;
Console.WriteLine(dt.Kind);
Console.WriteLine(dt.Ticks);
Console.WriteLine(dt.ToBinary());
樣本輸出:
Local
635476072989775339
-8587895711865000469
你也應該認識到,DateTime.Now
返回Local
樣,這意味着蜱是基於本地運行代碼的計算機的時區。如果您從一個系統獲取刻度(或二進制)並在具有不同時區的系統上重新創建DateTime
,則會得到與您最初編碼的值不同的值。
相比之下,time_t
和C/C++中的大多數其他時間相關類型都基於UTC,因此該值沒有不明確之處。
C或C++?你的標題是C,你的問題是C/C++,你的標籤是C++。 – juanchopanza 2014-09-29 21:40:43
它被稱爲Win32的原因:它是爲32位系統(以及可能不具有64位數據類型的語言)製作的。如果有64位數字,你幾乎可以肯定不得不把它作爲一個包含一對32位數字的結構來處理。 – cHao 2014-09-29 21:45:18
你在找一個.NET庫嗎? **標準C++庫**中沒有處理Win32進程的任何內容。 – 2014-09-29 21:45:58