C# 将负十六进制文字值指定为长字符串

C# 将负十六进制文字值指定为长字符串,c#,literals,C#,Literals,在VB中,以下赋值为负值: Dim a As Long=&HEFCDAB89 尺寸b为长=&H98BADCFE 在C#中指定相同的十六进制值不会产生相同的值: long a = 0xEFCDAB89; long b = 0x98BADCFE; 如何像在VB中一样在C中分配负十六进制值?使用: 使用: 我不知道有什么技巧可以告诉编译器你想要指定一个负的十六进制文字,我不确定这是否真的可能。我相信您唯一的选择是将ulong文本转换为long。它必须在未经检查的上下文中完成。它仍然是编译时已知的值

在VB中,以下赋值为负值:

Dim a As Long=&HEFCDAB89
尺寸b为长=&H98BADCFE
在C#中指定相同的十六进制值不会产生相同的值:

long a = 0xEFCDAB89;
long b = 0x98BADCFE;
如何像在VB中一样在C中分配负十六进制值?

使用:

使用:


我不知道有什么技巧可以告诉编译器你想要指定一个负的十六进制文字,我不确定这是否真的可能。我相信您唯一的选择是将
ulong
文本转换为
long
。它必须在未经检查的上下文中完成。它仍然是编译时已知的值,因此不会生成实际的转换代码

long value = unchecked((long)0xFFFFFFFFFFFFFFFE);
// value == -2L
请注意,在VB中,
&HEFCDAB89
&H98BADCFE
实际上是
整数
文本。他们只是碰巧被提升到了一个
Long
。要指定
Long
文字,必须包含后缀
L
。因此,您的作业必须是:

Dim a As Long=&hffffffefcdab89l'这些现在实际上是长文本
尺寸b长度=&HFFFFFF98BADCFEL

我不知道有什么技巧可以告诉编译器您想要指定负十六进制文字,我不确定这是否真的可行。我相信您唯一的选择是将
ulong
文本转换为
long
。它必须在未经检查的上下文中完成。它仍然是编译时已知的值,因此不会生成实际的转换代码

long value = unchecked((long)0xFFFFFFFFFFFFFFFE);
// value == -2L
请注意,在VB中,
&HEFCDAB89
&H98BADCFE
实际上是
整数
文本。他们只是碰巧被提升到了一个
Long
。要指定
Long
文字,必须包含后缀
L
。因此,您的作业必须是:

Dim a As Long=&hffffffefcdab89l'这些现在实际上是长文本
尺寸b长度=&HFFFFFF98BADCFEL