我正在處理一個二進制字串流,我想以最節省記憶體的方式將此資料分配給資料型別。
例如:int使用4bytes用于范圍的-2147483648 to 2147483647
由于我的資料只是 1 和 0,用于大量二進制資料的最佳資料型別是什么?
我試過使用 bitset,但與整數資料型別相比0001 for 1,0101 = 5運行讀取和替換等功能運行速度較慢。
有沒有其他有效的方法來存盤和遍歷資料型別中的二進制資料?
uj5u.com熱心網友回復:
我懷疑您所說的“更有效的方式”是指最小化香農資訊熵的方式。
編碼資料以最小化所述熵的一種非常常見的方法是使用可變長度代碼。
uj5u.com熱心網友回復:
特爾;博士: char*
如果您正在尋找性能,請僅使用位元組陣列(char*或char[])。嘗試使用高級函式來移動/復制資料(memcpy、memmove 等)。正是與位的互動使事情變慢。盡可能避免它們。
如果資料是位元組對齊的,您將獲得巨大的速度提升。您可以對指標型別 ( int* int_ptr = reinterpret_cast<int*>(char_ptr); int my_int = *int_ptr;)執行 reinterpret_cast 之類的操作。如果不是,因為空間可能更高,仍然使用高級函式來查看大的速度提升。就像是
unsigned int *int_ptr = reinterpret_cast<int*>(char_ptr*);
unsigned int my_int = *int_ptr >> offset_bits *(int_ptr 1) << (sizeof(int) * 8 -offset_bits);
也編譯-O2讓編譯器做魔術,也許讓你的代碼更快。
始終確保您可以控制資料的大小,不要讓它以 \0 結尾或類似的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392848.html
上一篇:PowerShell|EVTX|將訊息與陣列進行比較(如)
下一篇:將欄位的值分配給表單父級
