V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od
… více »Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.
Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.
Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.
Rozšíření webového prohlížeče Urban VPN Proxy a další rozšíření od stejného vydavatele (např. 1ClickVPN Proxy, Urban Browser Guard či Urban Ad Blocker) od července 2025 skrytě zachytávají a odesílají celé konverzace uživatelů s AI nástroji (včetně ChatGPT, Claude, Gemini, Copilot aj.), a to nezávisle na tom, zda je VPN aktivní. Sběr probíhá bez možnosti jej uživatelsky vypnout a zahrnuje plný obsah dotazů a odpovědí, metadata relací i
… více »QStudio, tj. nástroj pro práci s SQL podporující více než 30 databází (MySQL, PostgreSQL, DuckDB, QuestDB, kdb+, …), se stal s vydáním verze 5.0 open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache 2.0.
Byla vydána nová verze 259 správce systému a služeb systemd (Wikipedie, GitHub).
Cloudflare Radar poskytuje aktuální informace o globálním internetovém provozu, útocích nebo trendech. Publikován byl celkový přehled za rok 2025. Globální internetový provoz vzrostl v roce 2025 o 19 %.
Řešení dotazu:
to asi neni to co chce, sice podle zadani by to tak i vypadalo ale neco mi rika ze to chce na urovni pameti, takze proste chce mit napriklad pole 20 charu, kde prvniu 4chary bude ten int, pak nejakej jeden char(znak), pak zase 4*char pro int a pak zbytech znaku retezce.
Ja bych to tam nakopiroval pomoci memcopy, nebo primo.
struct __attribute__((__packed__)) RetezecPrefix {
int cislo1;
char znak;
int cislo2;
};
int main(int argc, char **argv)
{
// zpusob 1
int cislo1 = 15;
int cislo2 = 2;
char znak = 's';
char* cislo1c = (char*)&cislo1;
char* cislo2c = (char*)&cislo2;
char* ahoj = "ahoj";
char* vysledne_pole = (char*)malloc((strlen(ahoj) + 1) + (2*sizeof(int)));
memcpy(vysledne_pole, cislo1c, sizeof(int));
vysledne_pole = vysledne_pole + sizeof(int);
memcpy(vysledne_pole, &znak, 1); // vysledne_pole[0] = znak;
vysledne_pole = vysledne_pole + sizeof(char);
memcpy(vysledne_pole, cislo2c, sizeof(int));
vysledne_pole = vysledne_pole + sizeof(int);
memcpy(vysledne_pole, ahoj, strlen(ahoj));
// zpusob2
struct RetezecPrefix rp = {15,'s',2};
char* vysledne_pole2 = (char*)malloc(strlen(ahoj) + sizeof(struct RetezecPrefix));
memcpy(vysledne_pole2, &rp, sizeof(struct RetezecPrefix));
vysledne_pole2 = vysledne_pole2 + sizeof(struct RetezecPrefix);
memcpy(vysledne_pole2, ahoj, strlen(ahoj));
return 0;
}
#include <string.h>
struct my_data {
int cislo1;
char znak;
int cislo2;
char text[];
} __attribute__((__packed__));
int main(void) {
char pole[256];
struct my_data *data = (void *)pole;
data->cislo1 = 15;
data->znak = 's';
data->cislo2 = 2;
strcpy(data->text, "nejaky text"); // pozor na buffer overflow
return 0;
}
Obojí výše uvedené je humus. Základní nepochopení smyslu union.
union intydzr
{
int i;
char c[sizeof(int)];
};
Ale pozor na '\0'.
Tak já půjdu naschvál špatným příkladem, aneb prasárny s pointery a makry. Takhle se to dá třeba zařídit v čistém C, pokud nechceš používat nestandardní __packed__ kdesicosi.
Jestli to má být portovatelné, pak by bylo dobré do toho pole místo obyčejných integerů přiřazovat htobe32(nějaký_integer) a číst je odtud pomocí be32toh(integer_z_pole). Tohle je popsané v man 3 endian.
#include <stdio.h>
#define ARRAY_TYPE(tail_size, type_name) \
typedef char type_name[2 * sizeof(int) + sizeof(char) + tail_size]
#define first_int(array) (*(int*)array)
#define middle_char(array) (array[sizeof(int)])
#define second_int(array) (*(int*)(array + sizeof(int) + sizeof(char)))
#define tail_string(array) (array + 2 * sizeof(int) + sizeof(char))
#define TAIL_STRING "ahoj"
static const char *const TAIL = TAIL_STRING;
static const size_t TAIL_SIZE = sizeof(TAIL_STRING) - 1;
int main() {
ARRAY_TYPE(TAIL_SIZE, Array);
Array array;
first_int(array) = 15;
middle_char(array) = 's';
second_int(array) = 2;
for (const char *t = TAIL; *t; ++t)
tail_string(array)[t - TAIL] = *t;
printf("First int: %d\n"
"Middle char: %c\n"
"Second int: %d\n"
"Tail string: ",
first_int(array), middle_char(array), second_int(array));
for (size_t i = 0; i < TAIL_SIZE; ++i)
putchar(tail_string(array)[i]);
putchar('\n');
return 0;
}
sprintf().
sprintf(), nebo obojí.
Tak prosím, ten jednořádkový ekvivalent mé ukázky by mě opravdu zajímal.
Kdepak je?
Mimochodem, odkdy sprintf() píše integery binárně po bytech? Že jsem si toho nějak nevšiml. Nesnažíš se doufám naznačit, že hrůza typu sprintf(string + sizeof(int) + sizeof(char), "%c%c%c%c", ((char*)&integer)[0], ((char*)&integer)[1], ...) by byla lepší…?
sprintf(str, "%d%c%d%s", cislo1, znak, cislo2, "ahoj");
Uf. To má být vtip? Vždyť to nedělá ani náhodou totéž co moje ukázka. Ptal jsem se na jednořádkový ekvivalent mé ukázky, nikoliv na něco náhodného jiného.
Pravda, zadání je trochu nepřesné (hlavně kvůli tomu podivně zřetězenému příkladu). Já jsem zadání pochopil tak, že integer má být v tom poli binárně jako 4 byty — výslovně je tam zmínka o sizeof(int) —, nikoliv jako desítková textová reprezentace.
String "2" nebo "15" opravdu nemá velikost sizeof(int).
Moje ukázka ze zadání nic nevypouští. V tom je celá pointa. Prostě se snažím zadání interpretovat tak, aby v té interpretaci bylo co nejméně rozporů. Zadání se neptá, „jak zřetězit pár stringů“, ale mluví v podstatě o nějaké packed reprezentaci dat s fixní velikostí (sizeof(int) atd.). Přesně tu moje ukázka vytváří.
Navíc zadání říká, že data se z toho pole mají dát získat zpátky. Tohle tvé řešení taky nesplňuje, například když zvolím ten char '3' a závěrečný string "1234".
Jo, taky by se mi líbilo řešit věci tak, že půlku zadání vypustím a druhou půlku upravím — to by bylo fajn! 
Odpovídám na původní dotaz.
Neodpovídáte.
Jestli to má být portovatelné, pak by bylo dobré do toho pole místo obyčejných integerů přiřazovat htobe32(nějaký_integer) a číst je odtud pomocí be32toh(integer_z_pole).
htonl(), ntohl() :-) Ale pak by ten protokol/formát nejspíš měl ta čísla na 32 bitů zarovnaná.
Tahle archaická sada funkcí/maker (většinou) nemá 64-bitové ekvivalenty, proto bych ji příliš nedoporučoval. Vůbec je smutné, že hton{l,s}()/ntoh{l,s}() jsou standardní POSIX, zatímco to, co jsem doporučoval, vůbec není standardizované. Ale aspoň to má 64-bitovou verzi a nesnaží se to jedno z možných pořadí bytů nazývat záhadně "network".
Tiskni
Sdílej: