2011-08-12 71 views
1

在VB中,下面的分配下面具有負值:分配一個負的十六進制文字值作爲一個長

Dim a As Long = &HEFCDAB89 
Dim b As Long = &H98BADCFE 

在C#分配相同的十六進制值不會導致相同的值:

long a = 0xEFCDAB89; 
long b = 0x98BADCFE; 

如何在C#中分配負十六進制值,因爲它在VB中?

回答

1

使用L and UL literals

long b = 0xEFCDAB89L; //signed long 
long c = (long)0x98BADCFEUL; //unsigned long 
0

我不知道任何技巧來告訴你要指定一個負的十六進制文字的編譯器,我不知道這是真的有可能。我相信你唯一的選擇是將ulong文字轉換爲long。這將不得不在未經檢查的情況下完成。它仍然是編譯時已知的值,所以不會生成實際的轉換代碼。

long value = unchecked((long)0xFFFFFFFFFFFFFFFE); 
// value == -2L 

注意,在VB,&HEFCDAB89&H98BADCFE實際上Integer文字。他們恰好被提升爲Long。要指定文字,您必須包含後綴L。所以你的任務必須是:

Dim a As Long = &HFFFFFFFFEFCDAB89L ' these are actually long literals now 
Dim b As Long = &HFFFFFFFF98BADCFEL 
相關問題