[Delphi] Převod čísla většího než 255 na znak

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod MMoRPG 6. 4. 2007 10:25

Čao, potřeboval bych poradit:

Dělám aplikaci pro načítání SMS z telefonu v PDU do čitelný podoby. SMS se můžou ukládat pomocí 7/8/16 bit. kódování. Já si nevim rady s tim 16bit. Text SMS vypadá takto:

Kód: Vybrat vše
'00C10063010D010F011B0159016100DF0119006B00F400FC017E'


Na internetu sem našel jednu stránku kde převod funguje - vytáhl sem ze zdroje funkci pro převod:

Kód: Vybrat vše
function getUserMessage16(input,truelength)
{
   var smsMessage = "";   
   calculation = "Not implemented";

   // Cut the input string into pieces of 4
   for(var i=0;i<input.length;i=i+4)
   {
      var hex1 = input.substring(i,i+2);
      var hex2 = input.substring(i+2,i+4);
      smsMessage += "" + String.fromCharCode(HexToNum(hex1)*256+HexToNum(hex2));
   }
   
   return smsMessage;
}


A ten sem zkusil přepsat do Delphi až mi vyšlo něco takovýho:

Kód: Vybrat vše
    hex1 := source[1] + source[2];
    hex2 := source[3] + source[4];
    result := char(hexToInt(hex1)*256 + hexToInt(hex2));


Problém je pochopitelně v tom, že Char mi u čisla většího než 255 odečte 256 a ten zbytek vyplivne jako charakter. (269 mi převede na #13). Tudíž hledám nějakou alternativu pro fromCharCode nebo nějakej jinej kloudnej způsob převodu, zatim sem ale nic nenašel. Nevíte o něčem?
MMoRPG
Kolemjdoucí

Odeslat příspěvekod Tomcat 6. 4. 2007 10:35

V Delphi uz strasne dlouho nedelam, ale nebyl tam nahodou typ WideChar?
"Nemůžete nikoho nic naučit. Můžete mu nanejvýš pomoci, aby to sám v sobě nalezl. " Galileo Galilei
Tomcat
Junior
Uživatelský avatar

Odeslat příspěvekod MMoRPG 6. 4. 2007 10:39

:oops: Jak jednoduchý, to je přesně ono :oops: Díky moc :wink:
MMoRPG
Kolemjdoucí

Odeslat příspěvekod BEZY 16. 4. 2007 14:24

hm, tak já mam opačnej problém, jak převást char na widechar (resp. unicode?)

např z č (232) potřebuju dostat $010D
Našel sem na tý stránce html funkci

Kód: Vybrat vše
output = output + "" + ( ToHex( (myChar&0xff00)>>8 )) + ( ToHex( myChar&0xff ) );


ale pře nevim co je >>, tak sem zkusil přepsat jen druhou část >

Kód: Vybrat vše
intToHex(ord(myChar) AND $FF, 2)


Ale tohle mi vychází stejně jako obyč ord(). Nevíte jak to udělat aby to šlo? Nebo nějakou funkci přímo v Delphi? V helpu sem nic nenašel...
BEZY
Junior
Uživatelský avatar

Odeslat příspěvekod hekrhy 17. 4. 2007 01:06

nezkoumal jsem ten kod, ale >> je SHR (bitovy posun doprava) :)
hekrhy
Junior
Uživatelský avatar

Odeslat příspěvekod BEZY 17. 4. 2007 18:59

ok, přepsal sem kod na

Kód: Vybrat vše
output := output + IntToHex( (Ord(myChar) AND $ff00) shr 8, 2)
+ ( ToHex( myChar&0xff ) );


kde output: string a mychar: char, ale pořád totéž.. :(
BEZY
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků