在VB中,以下分配具有负值:
Dim a As Long = &HEFCDAB89
Dim b As Long = &H98BADCFE
在C#中分配相同的十六进制值不会产生相同的值:
long a = 0xEFCDAB89;
long b = 0x98BADCFE;
如何在C#中分配负十六进制值,就像在VB中一样?
答案 0 :(得分:1)
long b = 0xEFCDAB89L; //signed long
long c = (long)0x98BADCFEUL; //unsigned long
答案 1 :(得分:0)
我不知道告诉编译器你想要指定负十六进制文字的任何技巧,我不确定这是否真的可行。我相信您唯一的选择是将ulong
字面值转换为long
。它必须在未经检查的环境中完成。它仍然是编译时已知的值,因此不会生成实际的转换代码。
long value = unchecked((long)0xFFFFFFFFFFFFFFFE);
// value == -2L
请注意,在VB中,&HEFCDAB89
和&H98BADCFE
实际上是Integer
文字。他们恰好被晋升为Long
。要指定Long
字面值,您必须包含后缀L
。所以你的作业必须是:
Dim a As Long = &HFFFFFFFFEFCDAB89L ' these are actually long literals now
Dim b As Long = &HFFFFFFFF98BADCFEL