HEX To bin Umwandlung
-
Hallo
Ich habe ein Problem mit der Zahlen umwandlung von Hex nach bin
hat jemand für mich ein Tipp.
Beliebige werte kann ich nach hex wandeln aber weiter geht es nicht.
die Funktionextern PACKAGE int__fastcall HexToBin(char *Text, char *Buffer, int BufSize);
bringt ständig Deklarationsfehler.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop#include "Zahlen.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::btn_sendenClick(TObject *Sender)
{
AnsiString EditText = edteingabe->Text;
Label1 ->Caption = "";
for (int i=1;i<=EditText.Length();i++)
{
Label1 ->Caption = Label1 ->Caption + IntToHex(EditText[i],2) + " ";
}}
//---------------------------------------------------------------------------void __fastcall TForm1::btn_endeClick(TObject *Sender)
{Application->Terminate(); //BeendetProgramm
}
//---------------------------------------------------------------------------void __fastcall TForm1::btn_transClick(TObject *Sender)
{
extern PACKAGE int__fastcall HexToBin(char *Text, char *Buffer, int BufSize);}
//---------------------------------------------------------------------------
Ich hoffe das ihr mirthelfen könnt.
-
Hallo
Schau in die BCB-Hilfe zu der Funktion, dort steht welche Unit du includen must um die Funktion benutzen zu können.
Und sfds
bis bald
akari
-
Hallo Akari
Ich Danke für die Info.
Ich habe auch schon unter den Funktionen nach geschaut aber aus denenen werde ich auch nicht schlau.
-
Hi,
irgendwie kommt mir der Aufruf komisch vor...
Einfach nur die Funktion mit den Parametern aufrufen, das ganze extern __fastcall int brauchst Du ja nur, wenn Du die Funktion definieren willst...
Lass es einfach mal weg.
VG Pixfreak
-
Hallo
@pixfreak : Nein das ist schon in Ordnung. ET-techniker hat diese Zeile aus der Builder-Hilfe rauskopiert. Er selbst braucht diese Funktion ja nur aufzurufen.
@ET-techniker : Du hast doch schon in der Builder-Hilfe die Funktion gefunden. Und sort steht ein Eintrag "Unit". Das must du nun nur noch so un deinen Cosde schreiben
#include <Unitname.hpp>bis bald
akari
-
Ok, ja dann passt es...
Es müsste die Unit Classes sein, also
#include <classes.hpp>Vg Pixfreak
-
Hallo,
Mal eine kleine Erklärung dazu was ich eigentlich damit will.
Ich will folgendes machen einen ASCII oder Hex code in einen Binär wert wandeln und in dann an eine
RS 232 Schnittstelle schicken. Wo ich dann mit dem Binär-Code einen Schrittmotor steuere.
Dafür brauche ich dieses Programm. Wisst ihr wo es so etwas Schon fertiges gibt?Bin sehr Dankbar für jegliche Hilfe.
-
Hallo
Das alte Problem zwischen interner Verwaltung und Darstellung für den User...
Ich bin mir sehr sicher das du nichts umwanden must sondern nur an eine Funktion einen bzw. 4 chars übergeben must. Den der Computer verwaltet intern alles binär.bis bald
akari
-
Ja das hört sich einfach an.
aber ich habe zu wenig erfahrung in c++um das richtig deuten zu können.
Wie meinst du das mit den 4 char's?
-
Hallo
Wir können dir nichts konkretes sagen bevor du nicht sagst wie dudie Schnittstelle ansprichst.
Mit 4 chars meine ich die Aufteilung eines Integerwertes in die kleinste Einheit von C/C++. (Auf 32-bit Plattformen ist char 1 Byte, int 4 Byte)
Das kannst du zum Beispiel so machen :// Integer der binär übertragen werden soll int Value = 1000; // Berechnung aus wievielen Bytes ein int besteht (auf 32-bit immer 4 Byte) std::size_t Digits = sizeof(int) / sizeof(unsigned char); std::cout << "Anzahl chars pro int : " << Digits << std::endl; // Ein Zeiger auf einen unsigned char wird angelegt der auf den Speicherbereich des Integers zeigt. unsigned char* Binary = reinterpret_cast<unsigned char*>(&Value); // Ausgabe der einzelnen Bytes des Integers über den Char-Zeiger in Dezimalform for (std::size_t lv = 0; lv < Digits; lv++) std::cout << int(Binary[lv]) << " "; std::cout << std::endl;Zu beachten ist das Binary nun kein richtiger C-Style String ist. Denn einerseits ist dieser nicht korrekt mit einem '\0' terminiert, anderseits beeinhaltet dieser nun auch nicht druckbare Zeichen.
Aber dafür hast du nun deine Integerzahl in einzelne Bytes zerlegt. Diese kannst du nun über typische Binärschnittstellen versenden, die 2 Parameter haben :
Einmal ein (unsigned) char*, und zweitens die Anzahl der gültigen Bytes in der Zeichenkette (in diesem Fall 4).bis bald
akari
-
Hallo Akari,
Danke für Info
Die Schnittstelle möchte ich über eine rsapi.dll Datei ansprechen.