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
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