Makro v C-ju iz stringa array

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

Makro v C-ju iz stringa array

OdgovorNapisal/-a s54mtb » 04 Jan 2019, 00:08

Ali se da v pre-processorju narediti tako, da bi
Koda: Izberi vse
#define STRING               "{0x00, 0x30, 0x32, 0x35, 0x6F, 0x37, 0x7D, 0x04}"


spremenil v
Koda: Izberi vse
#define POLJE               {0x00, 0x30, 0x32, 0x35, 0x6F, 0x37, 0x7D, 0x04}



Oz. kako lahko iz makro definicije odstranim določen znak (navednice) ?
Making raw materials do something useful since 1969.
s54mtb
 
Prispevkov: 8653
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1149 krat
Prejel zahvalo: 2821 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 104

Re: Makro v C-ju iz stringa array

OdgovorNapisal/-a s54mtb » 04 Jan 2019, 10:07

Sem drugače rešil (če komu pride prav):

Koda: Izberi vse
#include <stdio.h>

//           01234567890123456789012345678901
#define EUISTR1    "3b7116e69E2abcDEF63FF1CAA1681FAC"

#define XSTRINGIFY_HELPER(A) #A
#define XSTRINGIFY(...) XSTRINGIFY_HELPER(__VA_ARGS__)

#define EUIKEY  XSTRINGIFY(EUISTR1)

#define HEXTONIBBLE(c) (*(c) >= 'A' ? ( *(c) >= 'a' ? (*(c) - 'a')+10 : (*(c) - 'A')+10 ) : (*(c)-'0'))

#define HEXTOBYTE(c) (HEXTONIBBLE(c)*16 + HEXTONIBBLE(c+1))

unsigned char eui_key[] = {
    HEXTOBYTE(EUIKEY+1),
    HEXTOBYTE(EUIKEY+3),
    HEXTOBYTE(EUIKEY+5),
    HEXTOBYTE(EUIKEY+7),
    HEXTOBYTE(EUIKEY+9),
    HEXTOBYTE(EUIKEY+11),
    HEXTOBYTE(EUIKEY+13),
    HEXTOBYTE(EUIKEY+15),
    HEXTOBYTE(EUIKEY+17),
    HEXTOBYTE(EUIKEY+19),
    HEXTOBYTE(EUIKEY+21),
    HEXTOBYTE(EUIKEY+23),
    HEXTOBYTE(EUIKEY+25),
    HEXTOBYTE(EUIKEY+27),
    HEXTOBYTE(EUIKEY+29),
    HEXTOBYTE(EUIKEY+31)
};

int main() {

    for (int i=0; i<sizeof(eui_key); i++) {
        printf("%02X ", eui_key[i]);
    }

    return 0;
}


https://rextester.com/WOZ69906
Making raw materials do something useful since 1969.
s54mtb
 
Prispevkov: 8653
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1149 krat
Prejel zahvalo: 2821 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 104

Re: Makro v C-ju iz stringa array

OdgovorNapisal/-a tilz0R » 04 Jan 2019, 12:01

C preprocessor engine ne pozna kontra stringify operacije.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1553
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 204 krat
Prejel zahvalo: 388 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Makro v C-ju iz stringa array

OdgovorNapisal/-a peterp » 04 Jan 2019, 12:24

Sicer je pa ta primer zgoraj malo čuden. Če že imamo EUISTR1 statično definiran, potem bi podatke lahko zapisali v drugačni obliki in enostavneje prišli do želene končne vsebine.
peterp
 
Prispevkov: 483
Pridružen: 23 Feb 2015, 13:52
Kraj: Maribor
Zahvalil se je: 101 krat
Prejel zahvalo: 73 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 74

Re: Makro v C-ju iz stringa array

OdgovorNapisal/-a s54mtb » 04 Jan 2019, 13:20

peterp je napisal/-a:Sicer je pa ta primer zgoraj malo čuden. Če že imamo EUISTR1 statično definiran, potem bi podatke lahko zapisali v drugačni obliki in enostavneje prišli do želene končne vsebine.


Problem je, ker keilov configuration wizard tega ne omogoča. Lahko vnašaš posamezne byte, ne moreš pa polja.
https://www.keil.com/pack/doc/CMSIS/Pac ... nnotations
Making raw materials do something useful since 1969.
s54mtb
 
Prispevkov: 8653
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1149 krat
Prejel zahvalo: 2821 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 104


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost