Převod BIN stringu 00101110 na string v HEX formátu – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Převod BIN stringu 00101110 na string v HEX formátu – Delphi – Fórum – Programujte.comPřevod BIN stringu 00101110 na string v HEX formátu – Delphi – Fórum – Programujte.com

 

oxidián0
Grafoman
21. 4. 2020   #1
-
0
-

Je v Delphi 7 nějaká funkce, která by převedla string jako např. '11010100' na hexidecimální hodnotu 'A80034' a zpět? Případně jak tento postup provést s vícero funkcemi?

Nahlásit jako SPAM
IP: 89.176.180.–
Jerry
~ Anonymní uživatel
504 příspěvků
21. 4. 2020   #2
-
0
-

tyhle věci se normálně hledaj na internetu

https://stackoverflow.com/questions/9854336/hex-to-binary-convert

stačí do googlu zadat Hex to BIN Delphi 7

a proč nepoužíváš nejnovější CodeGearRAD Studio ???

nebo taky tohle

https://uloz.to/file/7UGWGsxk/scantybasic-zip

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4c68:29c6:a9f1:4e4a...–
oxidián0
Grafoman
21. 4. 2020   #3
-
0
-

Na internetu jsem hledal a nic jsem nenašel. To co si poslal není co potřebuju. Ta funkce vrací integer ale já mám na vstupu i výstupu string.

Proč tam používají TMemoryStream? Není to zbytečné? Nešlo by to vypustit?  Mohl bys mi ukázat implementaci?

Nahlásit jako SPAM
IP: 89.176.180.–
gna
~ Anonymní uživatel
1849 příspěvků
22. 4. 2020   #4
-
0
-

Při nejmenším by v Delphi mělo umět StrToInt a IntToHex. Dost možná i ostatní, ale není problém si to dopsat. Takové věci se řeší v prvních týdnech výuky programování.

////////////////////////////////////////
// HEX

// sysutils:
// function IntToHex ( DecimalValue : Integer; MinimumWidth : Integer ) : string;
// function StrToInt ( IntegerString : string ) : Integer;

function HexToInt(hex: string): integer;
begin
  result := StrToInt('$' + hex);
end;

////////////////////////////////////////
// BIN

function IntToBin(val: integer; width: integer): string;
begin
  result := '';
  while val > 0 do
    begin
      result := IntToStr(val and 1) + result;
      val := val shr 1;
    end;
  while Length(result) < width do
    result := '0' + result;
end;

function BinToInt(bin: string): integer;
var
  i: integer;
begin
  result := 0;
  for i := 1 to Length(bin) do
    begin
      result := result shl 1;
      result := result or StrToInt(bin[i]);
    end;
end;

////////////////////////////////////////
// BIN HEX

function BinToHex(bin: string): string;
var
  one: string;
begin
  result := '';
  while Length(bin) > 0 do
    begin
      one := Copy(bin, 1, 8);
      bin := Copy(bin, 9); // od 9 do konce, nejsem si jisty jestli to jde napsat neuvedenim delky
      result := result + IntToHex(BinToInt(one), 2);
    end;
end;

function HexToBin(hex: string): string;
var
  one: string;
begin
  result := '';
  while Length(hex) > 0 do
    begin
      one := Copy(hex, 1, 2);
      hex := Copy(hex, 3);
      result := result + IntToBin(HexToInt(one), 8);
    end;
end;
Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
22. 4. 2020   #5
-
0
-

Pokud je to zarovnane po 8/16/32 bitech tak proste vemes 4 bity a bud prepocitas, nebo si udelas vyhledavaci tabulku a vyflusnes jeden znak 0..9A..F (technicky vzato 4 znaky jsou jedno 32b cislo, ale ruzny pretypovani se tusim v pascalu delaji slozite)

Nahlásit jako SPAM
IP: 78.80.16.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Grafoman
22. 4. 2020   #6
-
0
-

@gna: díky. Poznámka k str_HexToBin ... neměla by ta smyčka jet po dvou místo po jednom bitu? Mě to tak jak to je stačí, protože budu pracovat s hodnotami od 00 do FF ale jen mě to tak napadlo. J bude tam chyba protože 00FF dá jen nuly, ale to nevadí, jsem rád za ukázku, později když tak opravím.

Nahlásit jako SPAM
IP: 89.176.180.–
gna
~ Anonymní uživatel
1849 příspěvků
22. 4. 2020   #7
-
0
-

#6 oxidián

HexToBin jede to po dvou 

one := Copy(hex, 1, 2);

Hex 00FF vrací bin 0000000011111111. Možná je tam něco, co v D7 nefunguje, nebo funguje jinak, kdyžtak si to polaď.

Nahlásit jako SPAM
IP: 213.211.51.–
oxidián0
Grafoman
22. 4. 2020   #8
-
0
-

Smyčka - navyšování by mělo být po dvou ne? Hele nevím, nemám teď čas a energii to řešit, budu se muset na to podívat až budu odpočatý.

Nahlásit jako SPAM
IP: 89.176.180.–
gna
~ Anonymní uživatel
1849 příspěvků
22. 4. 2020   #9
-
0
-

Žadné navyšování tam není.

while Length(hex) > 0 do    // dokud neni `hex` prázdný
  begin
    one := Copy(hex, 1, 2); // vezmu první 2 znaky
    hex := Copy(hex, 3);    // a odmažu je

Napsal jsem to demetně, aby tam nebylo nic moc k přemýšlení... pro někoho.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
22. 4. 2020   #10
-
0
-

#9 gna
nemá tam místo

hex := Copy(hex, 3); // a odmažu je

být


hex := Copy(hex, length(hex)-3); // a odmažu je

?

EDIT: asi nemá já blbě pochopil Copy(hex,3);
já Copy nepoužívám, tedy jestli to je ve významu kopíruj z od pozice počet, pokud není počet tak do konce?
 

Nahlásit jako SPAM
IP: 185.112.167.–
gna
~ Anonymní uživatel
1849 příspěvků
24. 4. 2020   #11
-
0
-

#10 MilanL
JJ, tak jsem to myslel. Bez u vedení délky to bude až do konce. Ale nedaří se mi k tomu nic najít, kromě toho, že FPC v režimu Delphi takhle funguje. Možná ten parametr bude povinný.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
24. 4. 2020   #12
-
0
-

#11 gna
by mu to snad zařvalo při překladu.

Jinak v dokumentaci vidím prototypy funkcí jen se 3. parametry, takže jistější by as bylo použít

hex=Copy(hex,3,length(hex)-2);

já na tohle obvykle používám retězcové funkce left, right

Nahlásit jako SPAM
IP: 185.112.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

String to hex ebo Byte()"string" — založil Roman Uherek

Prevod Dec -> Bin — založil Mutagen

Převod do pdf formátu — založil Pebble

Převod hex do dec — založil cdx

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý