Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的4位枚举#_C#_Interop_Struct_Pinvoke - Fatal编程技术网

C# C语言中的4位枚举#

C# C语言中的4位枚举#,c#,interop,struct,pinvoke,C#,Interop,Struct,Pinvoke,我知道可以使用(:ulong,:uint,:ushort,:byte)使使用有符号或无符号64、32、16和8位值作为其基础值类型的枚举成为可能。但是有可能创建一个4位枚举吗 (我正在编写一些与C++互操作的代码,在C中,对于返回类型的结构,有一个字段最自然的是4位结构)。 但是有可能创建一个4位枚举吗 不,主要是因为那会很尴尬,而且很慢。从语法上讲,不存在指定为基类型的4位类型 < P>用C++和我在C中返回的结构有一个字段,它最自然的是4位结构。 我非常怀疑,C++可以处理位字段,但是这是非

我知道可以使用(:ulong,:uint,:ushort,:byte)使使用有符号或无符号64、32、16和8位值作为其基础值类型的枚举成为可能。但是有可能创建一个4位枚举吗

(我正在编写一些与C++互操作的代码,在C中,对于返回类型的结构,有一个字段最自然的是4位结构)。 但是有可能创建一个4位枚举吗

不,主要是因为那会很尴尬,而且很慢。从语法上讲,不存在指定为基类型的4位类型

< P>用C++和我在C中返回的结构有一个字段,它最自然的是4位结构。 <>我非常怀疑,C++可以处理位字段,但是这是非常有效的(除了空间中)。p> <>互操作与C++是很困难的,当返回类型是你的选择,那么不要让它比它更困难。 但是有可能创建一个4位枚举吗

不,主要是因为那会很尴尬,而且很慢。从语法上讲,不存在指定为基类型的4位类型

< P>用C++和我在C中返回的结构有一个字段,它最自然的是4位结构。 <>我非常怀疑,C++可以处理位字段,但是这是非常有效的(除了空间中)。p> <>互操作与C++是很困难的,当返回类型是你的选择,那么不要让它比它更困难。 来自C#规范:

已批准的枚举类型包括
byte
sbyte
short
ushort
int
uint
long
ulong

这些都不是4位类型。你也会在C++方面有同样的问题。

< P>从C的规格:

已批准的枚举类型包括
byte
sbyte
short
ushort
int
uint
long
ulong


这些都不是4位类型。在C++方面,你也会遇到同样的问题。

我想你的处理器不会以任何方式找到一个4位的值。这样的东西不会被填充到更大的宽度上,或者我会偏离轨道吗?”混乱:你没有错。英特尔“自然”的最小尺寸是8位。Michael想要的是可能的,但最好是将两个有限范围的8位枚举组合在一起。我认为您的处理器在任何情况下都不会发现4位值是自然的。这样的值不会被填充到更大的宽度,或者我偏离了方向吗?@Chaos:您没有弄错。英特尔“自然”的最小尺寸是8位。米迦勒想要的是可能的,但是最好是把两个有限范围的8位枚举结合在一起。C++有位字段。可以说结构域使用多少位。是的,在C++端,它只是在结构中做“:4”,然后定义16个可能的值。在C#端,很容易将其中的两个值合并为一个字节:4个值。但是我必须分别看下4位和上4位。C++有位字段。可以说结构域使用多少位。是的,在C++端,它只是在结构中做“:4”,然后定义16个可能的值。在C#端,很容易将其中的两个值合并为一个字节:4个值。但是,我必须分别研究它的下4位和上4位。为什么4位有符号和无符号值类型会比8位或16位类型更加笨拙和缓慢?两者都小于机器的内存大小(32位或64位)。而且,这里非常自然,因为在C++中,它们有一个UIT8,它们使用4语法将它们分成两个4位字段。两者都表示X和Y的16种可能状态。在我的C#struct中,我希望有两个4位字段表示X和Y的状态。相反,我必须有一个UInt8(字节)字段,它一起表示X和Y的状态。@Michael,字节是大多数硬件上最小的可寻址单元,大约与本机32/64位字一样快。对于4位,编译器必须插入额外的屏蔽操作。为什么4位有符号和无符号值类型会比8位或16位类型更笨拙、更慢?两者都小于机器的内存大小(32位或64位)。而且,这里非常自然,因为在C++中,它们有一个UIT8,它们使用4语法将它们分成两个4位字段。两者都表示X和Y的16种可能状态。在我的C#struct中,我希望有两个4位字段表示X和Y的状态。相反,我必须有一个UInt8(字节)字段,它一起表示X和Y的状态。@Michael,字节是大多数硬件上最小的可寻址单元,大约与本机32/64位字一样快。对于4位,编译器必须插入额外的屏蔽操作。