Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.
Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.
Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.
Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.
David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …
Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.
Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.
V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.
Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.
Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.
Bit offset ... 76 80 84 88 92 96 100 104 108 ...
Char boundaries | |-----1-----|-----2-----|-----3-----|-----4-----| |
Bits in byte order 0010 1010 0001 0111 0001 0011 0000 0011 0000 0010
Bits in bit field order 0101 0100 1110 1000 1100 1000 1100 0000 0100 0000
Char bits in byte order 0111 0010 0011 0001 0011 0001 0010 0000
Hex vals of char bits 7 2 3 1 3 1 2 0
Char val of char bits 'r' '1' '1' ' '
a makro, které to načtení provede : (taky jen odhaduju, co to vlastně dělá - nějaké bitové posuny, masky ale jen hádám )
#define read_bits(data,start,size) \
((*((uint64_t*) &(data)[(start) / 8]) >> ((start) & 7)) & (((uint64_t)1 << (size)) - 1))
Osvětlil by mi někdo, co to makro jako dělá ? Tedy tápu, proč je tam uint64_t a hvězdička u toho na začátku, možná je to vymezení typu, se kterým se bude to šibování provádět, ale jako jsem z toho mimo
Děkuji za výklad....
Řešení dotazu:
Ty explicitně napsané bitové operace vypadají složitější, než je nutné.
C i C++ mají bitfield (struct
s dvojtečkami). Tím by se možná dalo něco zjednodušit. (Ne pokud tam je nějaká hodně netriviální transformace nebo komprese, nicméně pokud jde o extrakci / ukládání některých specifických bitů ve dlouhém řetězci bitů, tam bitfield opravdu hustě pomáhá.)
Co se Pythonu týká, asi bych tu funkci pro manipulaci s bity sesmolil v C nebo C++ a pak zpřístupnil přes SWIG v Pythonu.
def read_bits(data, start, size):
return ((int.from_bytes(data[start // 8:], 'big') >> (start % 8)) & ((1 << size) - 1))
Rather than describe everything in terms of byte offsets, I'm going to define the layout as a series of variable-length bit fields. This is a critical part of the item format, because the position of many of the fields can change depending on what comes before it. If I say a certain value is a 3-bit field starting at bit position 150, for example, this translates to bits 6 and 7 of the byte 18 and bit 0 of byte 19 in the data structure. You can read an arbitrary bit field programatically using the following code (in C): #define read_bits(start,size) \ ((*((unsigned long *) &data[(start) / 8]) >> ((start) & 7)) & ((1 << (size)) - 1))
17 18 19 ........|......xx|x.......|... ->(start) & 7 -- zjistim offset 8 & 7 = 0, 9 & 7 = 1 .. 150 & 7 = 6
........|......xx|x.......|... -> 67|0(&data[(start) / 8]) >> ((start) & 7) -- posunu se na zacatek
........|......xx|x.......|... ->67|0((1 << (size)) - 1) -- pripravim si "masku" 1 << 3 = 8 - 1 = 7 0x00000111 - chci tri bity
........|......xx|x.......|... ->67|0((&data[(start) / 8]) >> ((start) & 7)) & ((1 << (size)) - 1)) -- Vyctu tri bity. Pytnon cte data po celych bytech a musel by si vyresit to "prekrivani" se hodnot..
Tiskni Sdílej: