RTV forum PL | NewsGroups PL

Jak skonwertować tekst '54455354' na hex 0x54 0x45 0x53 0x54 w AVR gcc?

AVR gcc - string to hex ?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skonwertować tekst '54455354' na hex 0x54 0x45 0x53 0x54 w AVR gcc?

tomi
Guest

Sat Mar 31, 2007 8:49 pm   



Mam tekst w takiej postaci: "54455354"
jak zamienić go na taką postać 0x54 0x45 0x53 0x54 ?

Czyli konwersja string na hex.
Jest do tego funkcja w avr-libc ?

Patryk Sielski
Guest

Sat Mar 31, 2007 9:04 pm   



tomi <tomj7-usun-spam@gazeta.pl> pisze:
Quote:
Mam tekst w takiej postaci: "54455354"
jak zamienić go na taką postać 0x54 0x45 0x53 0x54 ?

Czyli konwersja string na hex.
Jest do tego funkcja w avr-libc ?

Chyba nie. Trzeba samemu nagiąć.
Ja naskrobałem coś takiego

unsigned char char2nibble(unsigned char in){
return (in>'9')?in-'a'+0x0a:in-'0';
}


void string2number( unsigned char * tekst, // tekst ASCII
unsigned char * zmienna,//adres w pamięci
unsigned char ile){ // ile bajtów łykac
unsigned char a;
for(a=0;a<ile;a++){

*zmienna=(char2nibble(*(tekst++)))<<4;
*(zmienna++)|=(char2nibble(*(tekst++)));
}
}



--
Pozdrawiam,
Patryk Sielski
http://www.usprawnienia.pl

BartekK
Guest

Sat Mar 31, 2007 9:21 pm   



tomi napisał(a):
Quote:
Mam tekst w takiej postaci: "54455354"
jak zamienić go na taką postać 0x54 0x45 0x53 0x54 ?

Czyli konwersja string na hex.
Jest do tego funkcja w avr-libc ?
Jesli tylko w ten sposob (1:1, czyli znaki ascii na "bcd upakowany") to

proste jak budowa cepa.
Bierzesz po kolei kazdy bajt/char z stringu, odejmujesz od niego 0x30
(konwersja ascii cyferki '0' - '9' na liczbe 0-9), i wstawiasz do swojej
zmienej/zmiennych, ew co 2gi znak przesuwajac ta zmienna <<4 (w lewo o 4
bity).

--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

Wiktor S.
Guest

Sun Apr 01, 2007 9:13 am   



Quote:
Mam tekst w takiej postaci: "54455354"
jak zamienić go na taką postać 0x54 0x45 0x53 0x54 ?

Czyli konwersja string na hex.
Jest do tego funkcja w avr-libc ?

Chyba nie. Trzeba samemu nagiąć.

Jest strtol() w stdlib.h, ale spodziewałbym się większego narzutu kodu niż w
twoim rozwiązaniu ;-)


--
Azarien

tomi
Guest

Sun Apr 01, 2007 11:27 am   



Patryk Sielski napisał(a):
Quote:
tomi <tomj7-usun-spam@gazeta.pl> pisze:

Mam tekst w takiej postaci: "54455354"
jak zamienić go na taką postać 0x54 0x45 0x53 0x54 ?

Czyli konwersja string na hex.
Jest do tego funkcja w avr-libc ?


Chyba nie. Trzeba samemu nagiąć.
Ja naskrobałem coś takiego


Dzięki!
Jest niby strtol(), ale zajmuje prawie 1k kodu więcej, niż Twoje
rozwiązanie Wink

Lukasz
Guest

Mon Apr 02, 2007 3:32 pm   



Quote:
Bierzesz po kolei kazdy bajt/char z stringu, odejmujesz od niego 0x30
(konwersja ascii cyferki '0' - '9' na liczbe 0-9), i wstawiasz do swojej
zmienej/zmiennych, ew co 2gi znak przesuwajac ta zmienna <<4 (w lewo o 4
bity).


Tiaaa. Będzie działało dopóki nie natrafisz na tekst typu "ABCDEF". Trzeba
do tego dodać jeszcze warunek, bo pomiedzy '9' a 'A' jest jeszcze 7 znaków
"smieci".

--
Lukasz

Lukasz
Guest

Mon Apr 02, 2007 3:37 pm   



Masz tu mojego gotowego "BinLadena". Pisany do innych zastosowań, ale w
razie potrzeby sobie przerobisz.

unsigned char Hex2BinDigit(char* hex)
{
unsigned char bin;

bin = (hex[0] <= '9' ? hex[0] - '0' : hex[0] - '0' - 7) * 0x10 ;
bin += hex[1] <= '9' ? hex[1] - '0' : hex[1] - '0' - 7 ;

return bin;
}

void Hex2Bin(char* hex, char* bin, int binLen)
{
for (int i = 0, j = 0; i < binLen; i++, j+= 2)
bin[i] = Hex2BinDigit(hex + j);
}

--
Lukasz

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skonwertować tekst '54455354' na hex 0x54 0x45 0x53 0x54 w AVR gcc?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map