2012-11-08 26 views
9

मैंने अभी पाइथन के साथ काम करना शुरू कर दिया है और मैं सोच रहा हूं कि मुझे यूनियनों को पायथन (सीटीपीएस का उपयोग करके) कैसे परिभाषित किया जाना चाहिए? उम्मीद है कि मैं सही हूं कि यूनियनों को ctypes के माध्यम से समर्थित किया जाता है। उदाहरण कैसे निम्नलिखित ग कोड अजगर में हैपाइथन के साथ यूनियनों का उपयोग कैसे करें?

struct test 
{ 
char something[10]; 
int status; 
}; 

struct test2 
{ 
char else[10]; 
int status; 
int alive; 
}; 

union tests 
{ 
struct test a; 
struct test2 b; 
}; 

struct tester 
{ 
char more_chars[20]; 
int magic; 
union tests f; 
}; 

Thx के लिए, सरल उदाहरण कहा कि यदि किसी और बस एक वर्ग है कि ctypes.Union से विरासत बनाने के एक ही जवाब

from ctypes import * 

class POINT(Structure): 
    _fields_ = [("x", c_int), 
       ("y", c_int)] 

class POINT_1(Structure): 
    _fields_ = [("x", c_int), 
       ("y", c_int), 
       ("z",c_int)] 

class POINT_UNION(Union): 
    _fields_ = [("a", POINT), 
       ("b", POINT_1)] 

class TEST(Structure): 
    _fields_ = [("magic", c_int), 
       ("my_union", POINT_UNION)] 

testing = TEST() 
testing.magic = 10; 
testing.my_union.b.x=100 
testing.my_union.b.y=200 
testing.my_union.b.z=300 

उत्तर

5

ctypes tutorial पर एक नज़र डालें। आप ctypes.Union कक्षा का उपयोग करते हैं:

class test(ctypes.Structure): 
    # ... 
class test2(ctypes.Structure): 
    # ... 

class tests(ctypes.Union): 
    _fields_ = [("a", test), 
       ("b", test2)] 
+1

आप दोनों के लिए धन्यवाद। मुझे उस ctypes जानकारी को और अधिक सावधानी से पढ़ना चाहिए :) – Juster

2

लग रही है। इसके बारे में और पढ़ें here

फिर आप _fields_ कक्षा सदस्य में यूनियन फ़ील्ड को परिभाषित करते हैं।