在C#上用union声明C结构
我想在我的代码中声明_waitchain_node_info struct声明 - 用于WCT使用. 我试图遵循以下内容的教程: https://msdn.microsoft.com/en-us/library/eshywdt7(v=vs.110).aspx 但是,每次我都会使用我的托管结构声明使用wct呼叫,我会造成巨大的腐败. typedef struct _WAITCHAIN_NODE_INFO { WCT_OBJECT_TYPE ObjectType; WCT_OBJECT_STATUS ObjectStatus; union { struct { WCHAR ObjectName[WCT_OBJNAME_LENGTH]; LARGE_INTEGER Timeout; BOOL Alertable; } LockObject; struct {
6 2024-04-25
编程技术问答社区
C#的pinvoke结构与union和数组
im无法定义正确的C#代码以与C ++库一起使用,该库定义了一个使用Union和Arrays定义复杂的结构,我在执行C ++代码时会得到一些内存异常,并且我很确定它的原因. C ++结构如下,忽略了枚举和其他结构定义(如果需要,我会发布它们,但它们非常广泛) ) typedef struct { DG_CCTALK_APP_EVT_CODE eEventCode; DG_CCTALK_APP_EVT_TYPE eEventType; int iTime; int iHandle; unsigned char uchAddress; DG_CCTALK_BILL_INFO sBillInfo; int iBillAmount; union { long lData; int iData; unsigned char ucArray[128]; char
10 2024-04-22
编程技术问答社区
将C语言转换为C#语言
我正在尝试将此C代码转换为C#,是否有C#等同于C Union typedef? struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; typedef struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; } IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR; 谢谢. 解决方案 您可以查看以下页面.话虽如此,在.NET中,您有可以直接使用插座和TCP/IP工作的课程,例如插座
2 2024-04-17
编程技术问答社区
对两个IEnumerable序列进行追加/连缀
我有两组数据线.他们每个人都可以.我想将这两个列表附加/加入到一个列表中.我确定这是可行的.我不想做一个循环,并且注意到两个列表上有一个联合方法和一个联接方法.有什么想法吗? 解决方案 假设您的对象是相同类型的,则可以使用Union或Concat.请注意,像SQL UNION关键字一样,Union操作将确保消除重复项,而Concat(例如UNION ALL)将仅将第二个列表添加到第一个列表. . IEnumerable first = ...; IEnumerable second = ...; IEnumerable combined = first.Concat(second); 或 IEnumerable combined = first.Union(second); 如果它们具有不同的类型,则您必须将它们Select变成常见的东西.例如: IEnumerable first = ...; IEnumerab
10 2024-04-13
编程技术问答社区
C#中的C++联盟
我将用C ++写的库翻译成C#,而关键字" Union"曾经存在.在结构中. 将其转化为C#的正确方法是什么?它做什么?看起来像这样; struct Foo { float bar; union { int killroy; float fubar; } as; } 解决方案 您可以使用明确的字段布局: [StructLayout(LayoutKind.Explicit)] public struct SampleUnion { [FieldOffset(0)] public float bar; [FieldOffset(4)] public int killroy; [FieldOffset(4)] public float fubar; } 未经测试.这个想法是两个变量在您的结构中具有相同的位置.您当然只能使用其中之一. struct tutorial 更多有关工
8 2024-04-10
编程技术问答社区
谁能帮我解释一下这段代码的处理过程?
实际上我在在线C编译器中编译了此内容,代码的输出为5 ...处理是如何进行的?? 的? #include int main() { struct ab {char a,b;}; union abcd { int c; struct ab d; }k; k.d.a=5; k.d.b=0; printf("%d",k.c); } 解决方案 您在整数和包含2个字符的结构之间有一个联合. 代码正在更改结构的第一个字符.由于联盟,它影响了另一个工会成员的第一个字节,即整数. 在一台小型机器上,将整数的第一个字节设置为5使整个整数5,这就是您在这里看到的. 在一台大型机器上,您最终取决于整数的实际尺寸.
4 2024-04-10
编程技术问答社区
为什么标准中说C语言中的结构、枚举和联盟的标签有三种可能的名称空间,而实际上他们只有一种?
在ISO/IEC 9899:2018(C18),6.2.3"标识符的名称空间"(强调我的): 6.2.3标识符的名称空间 1如果在翻译单元中的任何一点上都可以看到多个特定标识符的声明,则语法上下文disamame disamage disamage disamage disamage disame disame dismage disemautes使用了指的是不同实体.因此,各种标识符都有单独的名称空间,如下: 标签名称(通过标签声明的语法和使用的语法歧义); 结构,工会和枚举的标签(通过以下32的歧义)构成关键字结构,联合或枚举); 结构或工会的成员;每个结构或联合都有一个单独的名称空间(被用于通过.或 - > operator访问成员的表达式的类型歧义); 所有其他标识符,称为普通标识符(在普通声明者或枚举常数中声明). 32)只有一个标签的名称空间即使三个是可能的. 即使三个是可能的."这是什么意思. 作为实验,我尝试编译以下代码:
4 2024-04-10
编程技术问答社区
解释一下包含结构的联盟的sizeof运算符的结果
#include struct mystruct { char cc; float abc; }; union sample { int a; float b; char c; double d; struct mystruct s1; }; int main() { union sample u1; int k; u1.s1.abc=5.5; u1.s1.cc='a'; printf("\n%c %f\n",u1.s1.cc,u1.s1.abc); k=sizeof(union sample); printf("%d\n\n",k); return 0; } 操作员的大小返回8我仍然能够访问结构元素,一次以上一个以上,但sizeof运算符仍在返回我假设的原始数据类型的最大大小.为什么这种行为?实际上分配的大小是8吗? sizeof返回错误的价值
12 2024-04-10
编程技术问答社区
二进制表示法与联合
在以下程序中: union { int i; float f; } u; 假设32位编译器,u在内存中分配了4个字节. u.f = 3.14159f; 3.14159f使用IEEE 754表示,在这4个字节中. printf("As integer: %08x\n", u.i); u.i在这里代表什么? IEEE 754二进制表示形式是否解释为4个字节signed int? 解决方案 从i读取实现定义 blah等等. 仍然. 在"普通"平台上 float是 ieee-754 binary32格式 int是32位2的补充 float和int 是相同 /li> 通过union s 定义很好(C99+) (又名带有足够编译器的任何"常规" PC) 您将获得整个位模式与您的原始float匹配之一的整数,该图案被描述为这里 现在,有一个符号将int的2补充表示形式弄乱,因此您可能想使用unsigned类型进行此类实
4 2024-04-10
编程技术问答社区
将单个比特分配给字节
我有一个在微控制器和另一个芯片之间进行SPI通信.芯片接受16位单词.但是抽象库要求将数据发送为两个8位字节.现在,我想制作包装器,以便我可以轻松地创建读写请求...但是我还没有任何成功.这是应该的方式: 下表显示了16个. MSB可以是0写作或1用于阅读.该地址可以从0x0到0x7,数据为11位. R/W | ADDRESS | DATA B15 | B14-B11 | B10-B0 0 | 0000 | 00000000000 W0 | A3, A2, A1, A0 | D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0 例如,如果我想从register 0x1阅读,我想我必须设置这样的位: W0 | A3, A2, A1, A0 | D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0 1 | 0 0
8 2024-04-10
编程技术问答社区
如何在C语言中创建一个快速而巨大的联合数组而不浪费内存?
我想使用union将不同的数据类型存储在同一内存中.该数组的长度固定,应迅速访问,并应浪费尽可能少的记忆. 我将定义存储相同数据类型的区域.所以我这样做: #include #include #include #include #define RESERVED_BYTES 1073741824 //#define RESERVED_BYTES 2147483648 typedef union { char c[RESERVED_BYTES]; //1Byte uint8_t u8[RESERVED_BYTES]; //1Byte uint16_t u16[RESERVED_BYTES / 2]; //2Byte } array_type; int main(void) { array_type *array
2 2024-04-09
编程技术问答社区
C结构,联盟结构的指针
我有一个打字的结构和一个联合.联合包含结构和单个uint32_t.目标是将一个值分配给foo,该值与结构中的"位"相对应. #include #include #include typedef struct { uint32_t valA :1; uint32_t valB :1; uint32_t valC :1; uint32_t valD :1; uint32_t valE :1; } ValStruct_Type; typedef union { ValStruct_Type valStruct; uint32_t valUint; } ValUnion_Type; uint32_t foo = 0; int main(void) { ValStruct_Type Vals; Vals.valA = 0x0; Vals.v
12 2024-04-09
编程技术问答社区
C语言中的结构和标签联盟
#define HOST_NAME "UDP" #define ADDRESS "127.0.0.1" struct UDP_IP_Parameters { uint version; /* e.g. "1.0" = 0x0100 */ uint port; /* PORT */ taggedunion { "HOST_NAME" char[256]; "ADDRESS" char[15]; }; }; int main() { struct UDP_IP_Parameters udp; udp.version = 0x0100; udp.port = 444; } 我创建了一个嵌套在其中的结构和标记.是否可以将主机名和地址定义为上述常数?是否可以通过为其创建一个对象来分配一些值.谁能给我一些想法. 解决方案 不是c. 不,您无法在类型声明中指定值.
12 2024-04-09
编程技术问答社区
这个语法是什么:union{}?
void display_binary_float(unsigned int ui) { union { unsigned int ui; float f; } uif2; uif2.ui = ui; printf("binary: %08X float: %g\n", uif2.ui, uif2.f); } 1)什么是工会?由于某种原因,没有手动输入.在Google上找不到文档. 2)为什么uif2在函数联合末尾?这不是像union uif2 {}一样吗? 解决方案 wikipedia ,它说: 在C和C ++中,未标记的工会是 表达几乎完全像 结构(结构),除了每个 数据成员以相同的方式开始 位置在内存中. 我确定您拥有的任何工具的文档都会告诉您所有有关工会的信息,您还没有找到该部分. 其他解决方案 联合可以将内存块视为不同的变量/变量类型.每个变量共享相同的内存,并且联合使用的内存总数是最大成员使用的数量.
6 2024-04-09
编程技术问答社区
工会的大小随意外单词对齐方式变化
我有一个结构和联合定义为以下 struct aa{ float j; char aaa; char bbb; int bb; }aaaa; sizeof(aaaa) 12bytes union utag{ char bb; float kk; char *c; struct aa lala; }haha; sizeof(haha) 16bytes 我的编译器告诉我sizeof(aaaa)为12,sizeof(haha)为16. 我确实知道这个尺寸(AAAA)是12个,因为我有一个2个字节填充int bb. 但是,我不明白为什么我的工会哈哈是16个.我期望它是12个B),因为struct AA类型是内部最大的元素. 如果我评论联盟内部的char *c元素,sizeof(haha)会如预期的12分. union utag{ char bb; float kk; //char *c; s
6 2024-04-09
编程技术问答社区
联盟对一个变量的帮助有多大?
我已经研究了此 post 并探索了Union的用例.每个消息来源都说这对结构有效,我理解这一点. 但是,当您说: 时会出现混乱 "联合的变量共享相同的内存,当您更改一个变量的值时,另一个变量会更改,并且在一次时只能访问一个变量" 那么,为什么需要声明联合及其子变量,为什么我不能通过将最大内存作为联合最大变量来使用1个简单变量? 考虑此示例: union { int length; int breadth; char status; } dimension; Versus int dimension; # Now this can store the highest value similar to length and breadth. 解决方案 那么,为什么需要声明联合及其子变量,为什么我不能通过将最大内存作为联合最大变量来使用1个简单变量? 您可以做到这一点,但是联盟使它变得容易得多. 您的特定示例没有多大意义
4 2024-04-09
编程技术问答社区
为什么打包在同级联合体或结构之间不起作用?
在下面的示例中,我希望complex_t的大小与uint16_t:2个字节相同,但是是3个字节. 删除第二个联合(" proximity_unsafe")将大小降低到2个字节,但我无法弄清楚包装规则的模型. #include #include typedef union { uint16_t unsafe; struct { uint16_t backwardmotion_unsafe : 1; uint16_t batteryvoltage_unsafe : 1; union { uint16_t dropoff_unsafe : 4; struct { uint16_t dropofffrontleft_unsafe : 1; u
2 2024-04-09
编程技术问答社区
Arduino:不能将union结构作为指针传递,但我可以用gcc编译器来传递
我试图将结构与Arduino一起使用,但无法通过函数调用传递结构指针.在使用GCC为我的计算机添加主函数和编译时,一切正常,但是使用Arduino IDE,我会遇到错误. 我尝试的代码是: typedef union { struct { unsigned unit :2; unsigned channel:2; unsigned status :1; unsigned group :1; unsigned remote :26; }; unsigned long data; } Signal; Signal signal; void testPassingStruct(Signal *variable) { variable->status = 1; } void setup() { signal.status = 1; tes
8 2024-04-09
编程技术问答社区
使用union作为数据类型的双链表的问题
我必须创建一个用Union作为数据类型的列表,但事实证明,创建我的列表后,我所有列表中只有相同的值.我该如何处理? 您能帮我这个方向吗? 对您来说美好的一天 结构,联合和功能声明 #include #include #include //Declaration of list struct list_t{ struct node_t *head; struct node_t *tail; }; struct node_t { union val_t *vals; struct node_t *prev; struct node_t *next; }; //Declaration of Union union val_t{ int as_int; double as_double; char *as_str; }; int insert
6 2024-04-09
编程技术问答社区
使用工会的名称访问工会成员
如何访问结构内存在的联合成员? 考虑代码段: struct Emp { char name[20]; union address { char addr[50]; }; }; struct Emp e; 使用e,我如何访问addr而不创建任何联合对象? 解决方案 structs/unions in structs/nimions 在C11和GCC扩展中得到支持.如果此功能已打开,则可以直接使用e.addr.请注意,标签名称应为空. struct Emp { char name[20]; union { char addr[50]; }; }; 如果不支持它,则需要给union一个名称并使用e.u.addr. struct Emp { char name[20]; union address { char addr[50]; } u; }
4 2024-04-09
编程技术问答社区