سؤال

في مهمة أعمل حاليًا ، نحتاج إلى العمل مع ناقلات بت ، لكنني غير متأكد جدًا من كيفية القيام بذلك في بيثون. يجب أن تكون قادرة على أن تكون من 4 بت إلى 20 بت. لم أعمل مطلقًا مع Bit Vector من قبل ، لكنني أعتقد أن المرء سيقوم بإنشاء صفائف من البايتات غير الموقعة التي تعاملت معها باستخدام عمليات المعتادة و/أو xor.

ال قيود مهمة هنا: لا يمكنني الاعتماد عليها أي مكتبات أخرى غير تلك المقدمة مع بيثون القياسية.

أعتقد أنني أعرف كيف سأفعل هذا في C باستخدام صفائف من 8 بتات غير موقعة: على سبيل المثال ، لتحويل الجزء الثامن عشر من صفيف صفر إلى واحد ، سأفعل شيئًا مثل my_bit_array [3] & = 1 << 2

ولكن نظرًا لأن Python مكتوب ديناميكيًا وليس لديه نوع صفيف مدمج ، كيف يمكنني القيام بذلك بطريقة بيثون؟

وهل من الممكن (كيف؟) التعبير عن ناقل الحجم 20؟ ربما أفكر في صنع ناقل بايت 24 بت / 3 وتجاهل 4 بت.

هل كانت مفيدة؟

المحلول

المكتبة Bitvector هي مكتبة بيثون نقية لهذا الغرض ، ويجب أن تناسب الاحتياجات التي حددتها.

نصائح أخرى

هنا هو رمز PowerShell لتصدير قائمة دون محتويات. giveacodicetagpre.

ال Bitarray الوحدة النمطية هذا بكفاءة مع المنطقية.

لا أعتقد أن هناك نسخة نعم من الإجابة عن هذا السؤال في الوقت الحاضر: http://community.office365.com/en-us/forums/154/t/74400.aspx

هذه الأداة تقول إنها سيسمح لك بترحيل كل المحتوى الخاص بك: http://www.metavistech.com/Category/Tools-Office-365

ثم في غضون ذلك، يمكنك القيام بما يلي، كما يمكنك ترحيل المحتوى:

في المشرف المركزي، في أماكن المباني، قم بتغيير موقع مضيف Mysite الخاص بك إلى موقع Online الموقع: إدارة التطبيقات> تطبيق ملف تعريف المستخدم> إعدادات موقعي> موقع مضيف موقعي

سيؤدي ذلك إلى إعادة توجيههم إلى الموقع عبر الإنترنت

، وإيقاف القدرة على إنشاء mysite، عبر أذونات المستخدم لخدمة ملف تعريف المستخدم، للمقيمات

مؤرخة بعض الشيء لكنني سأترك خيارًا آخر stdlib هنا لمجرد المقارنة. من السهل أيضًا القيام بذلك باستخدام ctypes وحدة.

فمثلا:

وهل من الممكن (كيف؟) التعبير عن ناقل الحجم 20؟ ربما أفكر في صنع ناقل بايت 24 بت / 3 وتجاهل 4 بت.

class Simple(ctypes.LittleEndianStructure):
    _pack_ = 1
    _fields_ = [
                 ('one', ctypes.c_ubyte, 8),
                 ('two', ctypes.c_ubyte, 8),
                 ('three', ctypes.c_ubyte, 8)
               ]

s = Simple(0, 2, 256)
bytearray(s)        # bytearray(b'\x00\x02\x00')
s = Simple(0, 2, 255)
bytearray(s)        # bytearray(b'\x00\x02\xff')

class Simple(ctypes.BigEndianStructure):
    _pack_ = 1
    _fields_ = [
                 ('one', ctypes.c_ubyte, 8),
                 ('two', ctypes.c_ubyte, 8),
                 ('three', ctypes.c_ubyte, 8)
               ]

s = Simple(0, 2, 256)
bytearray(s)        # bytearray(b'\x00\x02\x00')
s = Simple(0, 2, 255)
bytearray(s)        # bytearray(b'\x00\x02\xff')

s.two |= 3
bytearray(s)        # bytearray(b'\x00\x03\xff')

أو شيء أكثر مباشرة إلى الأمام مثل هذا:

class bit_vector(Structure):
    _fields_ = [('bits', c_uint32, 24),
                ('unused', c_uint32, 8),
                ]

bv = bit_vector()
# turn on the 18th bit -- being explicit just to demo it
bv.bits |= int('000000000000000001000000', 2)
bin(bv.bits)   # 0b1000000

يستخدم بنية وحدة.

هناك أيضا بايثون النقي بيثون bitstring (مع Python 3 دعم).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top