Makro v C - "text" to uint32_t
Zuffa Jan
ZuffaJ na cgc.sk
Úterý Listopad 7 09:19:18 CET 2017
zdravim,
skusil som vo VS:
#define strtest(s) *(unsigned int *)s
unsigned int a = strtest("aaa");
a nehlasi to ziadnu chybu.
j.
-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Pavel Hudecek
Sent: Tuesday, November 07, 2017 1:20 AM
To: HW-news
Subject: Re: Makro v C - "text" to uint32_t
Pro jistotu jsem zkusil *, ale bez úspěchu:
#define STRtoINT(s) *(uint32_t *)(s)
Ještě jsem to zkoušel různě ozávorkovat, ale výsledek vždy stejný:
error: label at end of compound statement
(MCUXpresso IDE v10.0.2 [Build 411] [2017-07-11])
PH
-----Původní zpráva-----
From: Pavel Hudecek
uint32 byl jen součást příkladu použití vzniklého čísla
Obecně mi jde o to, aby výsledkem bylo jedno číslo, asi jako kdybych tam napsal 12345. Použití * se v tomto případě trochu bojím, asi někdy narazí na chybu zarovnání, když ten text nebude ležet na správném místě. Radši bych donutil preprocesor, aby z toho udělal číslo.
Praktických využití je v daném programu více, např. i toto:
switch (N) {
case MAKRO("abc"): ...
case MAKRO("xyz"): ...
}
-----Původní zpráva-----
From: Jaroslav Buchta
A proc zrovna uint32_t?
Pokud chcete prave 4 znaky na 32b cislo tak nejak takto
uint32_t x = *(uint32_t *)"abcd";
kdyz makro, tak
#define MAKRO(s) *(uint32_t *)(s)
kde s bude ten retezec.
Bezneji se ale pracuje s jednotlivymi znaky, to, co je mezi uvozovkami ma vlastnosti konstantniho pole znaku a da se k tomu pristupovat jako k poli cisel char *s = "abcdefgh..."; uint8_t a0 = (uint8_t)s[0]; ...
Z toho si pak taky muzete vyskladat libovolne hodnoty.
Dne 06.11.2017 v 21:13 Pavel Hudecek napsal(a):
> z "ble" by mohlo být např. 'b' + 'l'<<8 + 'e'<<16 + 0 nebo ty bajty v
> opačném pořadí, je to vlastně jedno.
>
> Tzn. jde mi o to, jak se v makru dostat k číslům reprezentujícím
> jednotlivé znaky textu. Zbytek si už pak vyřeším sám.
>
> PH
>
> -----Původní zpráva----- From: Jaroslav Buchta
>
> A co si predstavujete, ze v tom x ma pak byt? Muzete napsat priklad ve
> smyslu "xxxx" -> 0x.... ?
>
> Dne 06.11.2017 v 20:51 Pavel Hudecek napsal(a):
>> potřeboval bych makro, se kterým by šla konstrukce typu:
>>
>> uint32_t x = MAKRO("ble");
>>
>> jen vůbec nevím, jak v makru pracovat s textem (const char) a ani
>> nevím jak to hledat.
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list