Pregunta

En una tarea en la que estoy trabajando actualmente necesitamos trabajar con vectores de bits, pero no estoy seguro de cómo hacer esto en Python. Deberían poder ser de 4 bits a 20 bits. Nunca antes había trabajado con Bit Vector, pero supongo que uno crearía matrices de bytes sin firmar que manipuló utilizando las operaciones habituales y/o/XOR.

los restricción importante Aquí está: no puedo confiar en ningún Bibliotecas distintas a las suministradas con Python estándar.

Creo que sé cómo haría esto en C usando matrices de bytes sin firmar de 8 bits: por ejemplo, convertir el 18 ° bit de una matriz de cero en una, haría algo como my_bit_array [3] & = 1 << 2

Pero dado que Python se escribe dinámicamente y no tiene un tipo de matriz incorporado, ¿cómo haría esto de una manera pitónica?

¿Y es posible (¿cómo?) Expresar un bit vector de tamaño 20? Estoy pensando en hacer un vector de 24 bits / 3 byte e ignorar los 4 bits.

¿Fue útil?

Solución

La biblioteca Vector de bits es una biblioteca de python puro para este propósito, y debe adaptarse a las necesidades que especificó.

Otros consejos

Aquí está el código PowerShell para exportar una lista sin contenido.

$web = Get-SPWeb -Identity "SiteUrl"
$list = $web.Lists["ListName"]
$list.SaveAsTemplate("File_Name.stp", "List_Template_Title", 
"Description", $false);

los bitray El módulo hace esto de manera eficiente con los booleanos.

No creo que haya una versión de sí de la respuesta para esta pregunta en la actualidad: http://community.office365.com/en-us/forums/154/t/74400.aspx

Esta herramienta dice que le permitirá migrar todo su contenido: http://www.metavistech.com/category/tools-office-365

Mientras tanto, podría hacer lo siguiente, a medida que migra el contenido:

En el administrador central, en las instalaciones, cambie la ubicación de su host de MySite a la ubicación en línea: Administración de aplicaciones> Aplicación de servicio de perfil de usuario> My Sitio Configuración> My Sitio Host Ubicación

Esto los redirigirá a la ubicación en línea

y, desactive la capacidad para que el usuario cree un MySite, a través de los permisos de usuario del servicio de perfil de usuario, para el local

Un poco anticuado, pero voy a dejar otra opción de Stdlib aquí solo por el bien de la comparación. También es fácil hacer esto usando el ctipos módulo.

Por ejemplo:

¿Y es posible (¿cómo?) Expresar un bit vector de tamaño 20? Estoy pensando en hacer un vector de 24 bits / 3 byte e ignorar los 4 bits.

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')

o algo más sencillo como este:

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

Usar estructura módulo.

También está el Python puro pitón (con soporte de Python 3).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top