Bin to Hex
-
hallo zusammen ich hab in einer char zr[8]; eine binärzahl
und möchte die in hex umwandel.. wie mach ich das mit BinToHex komm ich nicht klar.. sprich ich weiß ned genau was die funktion von mir erwartet..char zr1[8],text[8] if (cb11->Checked == true) { zr1[0] = 1; } else { zr1[0] = 0; } if (cb12->Checked == true) { zr1[1] = 1; } else { zr1[1] = 0; } if (cb13->Checked == true) { zr1[2] = 1; } else { zr1[2] = 0; } if (cb14->Checked == true) { zr1[3] = 1; } else { zr1[3] = 0; } if (cb15->Checked == true) { zr1[4] = 1; } else { zr1[4] = 0; } if (cb16->Checked == true) { zr1[5] = 1; } else { zr1[5] = 0; } if (cb17->Checked == true) { zr1[6] = 1; } else { zr1[6] = 0; } if (cb18->Checked == true) { zr1[7] = 1; } else { zr1[7] = 0; } BinToHex(zr1,text,2); Edit1->Text = text;mfg
|23|
-
Hier ein kleines Beispiel zu BinToHex:
char bin[2]; // Platz für 2 Zeichen char text[(sizeof(bin)*2)+1]; // Platz für 2 Hexzeichen + terminierende 0 // 2 Zeichen in Puffer schreiben bin[0]='A'; bin[1]='B'; // Die 2 Zeichen im Puffer in Hex umwandeln BinToHex(bin, text, 2); // String Terminierung selber setzen, klappt nicht immer automatisch // obwohl das in der Hilfe steht *(text+(sizeof(bin)*2))=0; // Ausgegeben wird der String '4142' ShowMessage(text);Diese Funktion hat mich allerdings nicht vom Hocker gerissen, das Thema mit der abschließenden Null
im Zielstring klappte hier nämlich überhaupt nicht. Bei diesem Beipiel stand immer brav eine Hex 01
am Schluß des Strings.
-
und erklär mir mal bitte wieso 01 bin = 4142 ist ??
hmm das ganze geht irgendwie nicht..

hast auch nen Beispiel wie ich ein Int wer in eine Hexa zahl wandeln kann ??
-
|23| schrieb:
und erklär mir mal bitte wieso 01 bin = 4142 ist ??
hmm das ganze geht irgendwie nicht..

// 2 Zeichen in Puffer schreiben bin[0]='A'; bin[1]='B';der ASCII-code für den Buchstaben A ist 41 und für B 42 und das in einem String gibt 4142
BigNeal
-
BigNeal schrieb:
<Edit: Zitate bitte auf das Notwendigste beschränken. Danke!>
Dann erreiche ich damit mein ZZiel auch nicht den ich brauch was,
was mir aus z.b 10000101 = nen Hexa Zahl macht in diesen Fall ja: 85
-
<Edit: Zitate bitte auf das Notwendigste beschränken. Danke!>du kannst ja deine checkbox anstatt in ein chararray einfach alle in ein intwert reinschreiben, nicht einzeln in ein char.
im Stil von:int zrl; if (cb11->Checked == true) { zr1 +=1; } zrl<<1; if (cb12->Checked == true) { zr1 +=1; } zrl<<1; etc.. ShowMessage(IntToHex(zrl,2));
-
Wenn ich mir Dein Programmfragment so ansehe, willst Du eine Binärzahl, dargestellt durch 8 Checkboxen (angekreuzt=1, nicht angekreuzt=0) in eine Hexzahl umwandeln und darstellen. Ich hab Dir mal ein kleines Beispiel gestrickt wie man sowas realisieren könnte. Mach einfach ein neues Projekt (leere Form) mit dem u.a. Code. Alles weiter macht das Programm automatisch.
Wenn alles funktioniert, versuche den Programmcode nachzuvollziehen und zu verstehen.
Du kannst natürlich auf die Routinen InitializeObjects / UninitializeObjects verzichten, alle Kompos von Hand auf der Form plazieren und die Tagwerte und die OnClick-Routine der Checkboxen im Objektinspektor einstellen.
Keine Garantie auf Fehlerfreiheit
.h Datei
#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten private: // Anwender-Deklarationen TObjectList *CheckBoxList; TEdit *EHex; TPanel *CheckBoxPanel; unsigned binval1; void __fastcall CheckBoxClick(TObject *Sender); void InitializeObjects(void); void UninitializeObjects(void); void ShowHexVal(TCheckBox *cb, TEdit *ed, unsigned &binval); public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(void); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif.cpp Datei
#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { InitializeObjects(); } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1(void) { UninitializeObjects(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBoxClick(TObject *Sender) { ShowHexVal(static_cast<TCheckBox*>(Sender), EHex, binval1); } //--------------------------------------------------------------------------- void TForm1::UninitializeObjects(void) { CheckBoxList->Clear(); } //--------------------------------------------------------------------------- void TForm1::InitializeObjects(void) { int x, tagwert; TCheckBox *cb; // Form initialisieren Position=poDesktopCenter; Width=400; Height=200; // "Binärwert" initialisieren, wird von den // Checkboxen entspr. angepasst binval1=0; // Panel zur Aufnahme der Eingabekomponenten CheckBoxPanel=new TPanel(this); CheckBoxPanel->Parent=this; CheckBoxPanel->Width=200; CheckBoxPanel->Height=100; CheckBoxPanel->Top=10; CheckBoxPanel->Left=(ClientWidth - CheckBoxPanel->Width) / 2; // Checkboxen zum Einstellen der Binärzahl CheckBoxList=new TObjectList(this); tagwert=1; for(x=7; x>=0; x--) { cb=new TCheckBox(this); cb->Parent=CheckBoxPanel; cb->Top=10; cb->Left=10+(x*23); cb->Width=20; cb->Caption=*NullStr; cb->Tag=tagwert; tagwert<<=1; cb->OnClick=CheckBoxClick; CheckBoxList->Add(cb); } // Editfeld zur Anzeige der Hexzahl EHex=new TEdit(this); EHex->Parent=CheckBoxPanel; EHex->Width=40; EHex->Top=50; EHex->Left=(CheckBoxPanel->Width - EHex->Width) / 2; EHex->ReadOnly=true; } //--------------------------------------------------------------------------- void TForm1::ShowHexVal(TCheckBox *cb, TEdit *ed, unsigned &binval) { if(cb->Checked) binval |= (unsigned)cb->Tag; else binval &= ~(unsigned)cb->Tag; ed->Text=IntToHex((int)binval, 2); }
-
|23|,
hier noch eine schlichte Alternative (halbherzig getestet):char bin[8] = {0,0,0,0,1,0,1,0}; char dec[8] = {128,64,32,16,8,4,2,1}; int intVal = 0; for (int i = 0; i < 8; i++) { intVal = intVal | (bin[i]*dec[i]); } String hexStr = IntToHex(intVal, 2);
-
...bin heute Nacht mit einem markerschütternden Schrei erwacht - irgend etwas war überhaupt nicht in Ordnung:
[cpp] unsigned char dec[8] = {128,64,32,16,8,4,2,1};
[/cpp]
-
bin heute Nacht mit einem markerschütternden Schrei erwacht ...
Mir fallen solche Sachen meist dann ein, wenn ich im "gekachelten Raum" Platz genommen habe :D:D:D
-
ich hab die Lösung von dschensky mal noch etwas optimiert:
char bin[8] = {0,1,0,0,1,0,1,0}; int intVal = 0; for (int i = 0; i < 8; i++) { intVal <<= 1; intVal += bin[i]; } String hexStr = IntToHex(intVal, 2);