我需要將當前時間打包到限制位模式。打包時間到位字段
頂部5bits是小時,接下來的6是分鐘,接下來的6秒&其餘轉換回32位integrer之前被保留
我想出了一個討厭BITAND掩模,然後字符串連接。
這看起來過於複雜& CPU昂貴。有沒有更高效的&更重要的一點,優雅的方法?
我需要將當前時間打包到限制位模式。打包時間到位字段
頂部5bits是小時,接下來的6是分鐘,接下來的6秒&其餘轉換回32位integrer之前被保留
我想出了一個討厭BITAND掩模,然後字符串連接。
這看起來過於複雜& CPU昂貴。有沒有更高效的&更重要的一點,優雅的方法?
如何:
wl = 32
hl = 5
ml = 6
sl = 6
word = hours << (wl - hl) | minutes << (wl-hl-ml) | seconds << (wl-hl-ml-sl)
我會接受此答案,因爲如果聯合方法不起作用 – Naib
額外的搜索(http://varx.org/wordpress/2016/02/03/bit-fields-in-python/)和評論我的結算之間:
class TimeBits(ctypes.LittleEndianStructure):
_fields_ = [
("padding", ctypes.c_uint32,15), # 6bits out of 32
("seconds", ctypes.c_uint32,6), # 6bits out of 32
("minutes", ctypes.c_uint32,6), # 6bits out of 32
("hours", ctypes.c_uint32,5), # 5bits out of 32
]
class PacketTime(ctypes.Union):
_fields_ = [("bits", TimeBits),
("binary_data",ctypes.c_uint32)
]
packtime = PacketTime()
now = datetime.today().timetuple()
packtime.bits.hours = now[3]
packtime.bits.minutes = now[4]
packtime.bits.seconds = now[5]
,提供相關領域更清潔的結構化設置,尤其是在這個被稱爲至少每秒鐘。爲Date和其他bitpacking矢量創建了類似的結構
爲什麼你需要一個字符串來執行位操作? – JohanL
https://docs.python.org/3/library/struct.html和http://stackoverflow.com/questions/142812/does-python-have-a-bitfield-type – handle
@JohanL好吧......我的第一次傳遞是通過返回字符串的bin(x)方法,從而將多個這樣的字符串切分爲多個字符串。多重位移(正如你的答案所示)是我的後備,但我希望有更接近Python的聯盟。 – Naib