2012-02-25 47 views
2

我正在關注此示例代碼:http://support.microsoft.com/kb/871044,但在c#中執行。如何在C#中表示這些值?

我不知道該如何表達在C#中的以下內容:

Public Const FILE_ATTRIBUTE_NORMAL As Short = &H80S 
Public Const FILE_FLAG_NO_BUFFERING As Integer = &H20000000 
Public Const FILE_FLAG_WRITE_THROUGH As Integer = &H80000000 

Public Const PIPE_ACCESS_DUPLEX As Short = &H3S 
Public Const PIPE_READMODE_MESSAGE As Short = &H2S 
Public Const PIPE_TYPE_MESSAGE As Short = &H4S 
Public Const PIPE_WAIT As Short = &H0S 

具體來說,我不知道用「0X」前綴的十六進制值,但什麼是在S的所有有關的一些結束這些價值?同樣在第三行,當我將它轉換爲0x80000000時,我得到一個錯誤,說它無法隱式地從uint轉換爲int。不知道我是否應該施放,或者改變變量的類型?

+3

如果您使用.NET 3.5或更高版本,可以在http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx – Timiz0r 2012-02-25 04:00:26

+0

@ Timiz0r找到命名管道類別。 。我剛開始通過沒有考慮它是否已經構建到.net框架中的示例。有點驚訝我沒有想到先檢查。 – 2012-02-25 22:18:03

回答

7

C#沒有「s」表示法。它只是將整數轉換爲簡短。要獲得0x80000000的工作,你必須將其轉換爲整數。但是,這可能會導致溢出異常。要取消該操作並創建一個負數,請將該行包裝在unchecked()中。

public const short FILE_ATTRIBUTE_NORMAL = 0x80; 
    public const int FILE_FLAG_NO_BUFFERING = 0x20000000; 
    public const int FILE_FLAG_WRITE_THROUGH = unchecked((int)0x80000000); 

    public const short PIPE_ACCESS_DUPLEX = 0x3; 
    public const short PIPE_READMODE_MESSAGE = 0x2; 
    public const short PIPE_TYPE_MESSAGE = 0x4; 
    public const short PIPE_WAIT = 0x0; 
+0

太棒了...謝謝你! – 2016-03-08 18:29:39

2

退房MSDN的Type Characters頁面,VB.NET,其中規定:

Visual Basic中提供了一組文本類型的字符,你可以用它來強制字面承擔其他數據類型比它的形式表示的那個更好。

S後綴表示Short

關於您的變量類型,請考慮0x80000000的十進制值...它是2,147,483,648 - 正好比int的上限大1。您應該聲明變量爲uint,它允許04,294,967,295之間的值。