Wyswietlanie liczby hexadecymalnej (FF)

Wyswietlanie liczby hexadecymalnej (FF)

Wątek przeniesiony 2014-10-22 12:06 z C/C++ przez ŁF.

WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Witam życzliwych forumowiczów.

Nie potrafię wyświetlić w label, RichEdit, liczby hexadecymalnej

Mam taką zmienną

Kopiuj
char    Buffer_I[cbInQueue]; 

W niej zapisywany jest znak hexadecymalnie FF

Chce wyświetlić teraz tą zmienną w Label i RichEdit.
Próbuję wyświetlić to tak.

Kopiuj
Label1->Caption=Buffer_I;
RichEdit1->Text = Buffer_I;

Gdy do zmiennej wpisze np test to się wyświetli prawidłowo.

Co może być przyczyną.

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0

Przekonwertuj pierw do stringa za pomocą sprintf lub stringstream

Twój kod nie bardzo ma sens, Buffer_I jest tablicą, w jaki sposób zapisujesz tam 0xFF?


WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Wpisuję w Terminalu v 1.9 $FF

Następnie kod który jest odpowiedzialny z pobieranie danych z rs umieszcza to w zmiennej Buffer_I

Coś jednak nie jest tak.

W terminalu przesyłam liczbę w formie HEX np: FA 12 02 itd
Te liczny trafiają do bufora Buffer_I.

I teraz nie wiem czy są w formie HEX czy ASCII
Nie potrafię tego wyświetlić.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

odpalasz debuger i sprawdzasz.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Z tym debugerem to za bardzo nie wiem jak wyszukać.

_13th_Dragon
Kolejny dowód na to że w języku polskim wyraz "za bardzo" oznacza - "kompletnie nic"!
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

O google też za bardzo nie wiesz?

Kopiuj
Buffer_I[Indeks_Po_Ostatnim_Zapisanym_Znaku]=0;
Label1->Caption=AnsiString(Buffer_I);
RichEdit1->Text=Label1->Caption;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Dzięki za odpowiedz.

Niestety nie pomogło.
W załączniku przesyłam fotkę z wynikiem.
Po naciśnięciu wyślij HEX wysyłam zapytanie, w odpowiedzi dostaje ramkę hex który trafia do Buffer_I

  • hex.jpg (121 KB) - ściągnięć: 211
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Ja widzę że działa prawidłowo, może wyjaśnisz jak i co wpisujesz do Buffer_I i co spodziewasz się zobaczyć?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

W załączniku rozpisałem jak chciałbym żeby działał.

Wysyłam char hex[8] = {0x01,0x03,0x00,0x00,0x00,0x03,0x05,0xCB};

A chciałbym dostać 01 03 06 00 00 00 19 00 F1 31 36

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

To musisz skonwertować do takiej postaci:

Kopiuj
var Str:String;
var I:Integer;
...
 SetLength(Str,0);
for I:=0 to 7 do Str:=Str+Format('%0.2X ',[Ord(Buffer_I[I])]);
Label1->Caption=Trim(Str);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Zrobiłem coś takiego ale wywala błąd w C++ Builder

Kopiuj
    String Str;
	int i;
	Str.SetLength(0);

	for(int i = 0; i < 7 ; i++)
	{
	   Str = Format('%0.2X ',[Ord(Buffer_I[I])]);
	}
	Label1->Caption=Trim(Str);
edytowany 5x, ostatnio: wojno
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Zapomniałem że to Builder i napisałem w pascalu.

Kopiuj
    AnsiString Str;
    for(int i=0;i<7;++i) Str+=Format("%0.2X ",Buffer_I[I]);
    Label1->Caption=Trim(Str);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Dziękuje za pomoc

Niestety kompilator wywala 2 błedy

Kopiuj
E2129 Character constant too long (or empty) 
E2285 Could not find a match for 'Format(unsigned int,char)

Jutro będe szukał rozwiązania.
Pozdrawiam
I jeszcze raz bardzo dziękuje.

dodanie znacznika <code> - @furious programming

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Treści błędów także wstawiaj w znaczniki &lt;code&gt;
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Za późna pora, mają być podwójne cudzysłowy (poprawiłem), a skoro tego nie skojarzyłeś z tych błędów, to masz dobrą radę: - odpuść sobie ten projekt (przynajmniej na razie) i zacznij od podstaw C++


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Niestety taki jest koszt korzystania z różnego rodzaju forum.
Za nim uzyskasz odpowiedz w mniejszym lub większym stopniu musisz zapłacić frycowe w postaci komentarzy jaki to jesteś beznadziejny i słaby.

Pomimo tych drobnych niedogodności jestem wdzięczny wszystkim życzliwym ludziom którzy są ostatnią deską ratunku gdy cały Internet zawodzi.

Aha błąd dalej wywala.

_13th_Dragon
To są "frycowe" nie od forum zaś od braku samodzielnego myślenia.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
2

Skoro nadal wywala błąd to pokaż kod, albo zgłoś się na forum wróżbitów.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0
Kopiuj
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "mojrs.h"
#include <string.h>
#include <stdio.h>
#include <iostream>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define cbOutQueue 16          //rozmiar bufora danych wyjściowych
#define cbInQueue  16          //rozmiar bufora danych wejściowych
TForm3 *Form3;
// Add these global variables
	char    Buffer_O[cbOutQueue]; // bufor danych wyjściowych
	char    Buffer_I[cbInQueue]; // bufor danych wejściowych
	DWORD   Number_Bytes_Read; // liczba bajtów do czytania
	AnsiString Str;
	int I;
String pp;
static DCB dcb;
HANDLE hComm;
char lpBuffor_read[33], lpBuffor_write[33];
DWORD RS_ile;
bool abContinue = true;
int isRead = false;
bool CommFlag;
	DWORD   fdwEvtMask;    // informacja o aktualnym stanie transmisji
    COMSTAT Stat;             // dodatkowa informacja o zasobach portu
	DWORD   Errors;           // reprezentuje typ ewentualnego błędu
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
	: TForm(Owner)
{
}

int __fastcall Read_Comm(HANDLE hComm,
                         LPDWORD lpNumberOfBytesRead, DWORD Buf_Size)
{
    DWORD nNumberOfBytesToRead;

	ClearCommError(hComm, &Errors ,&Stat);

    if (Stat.cbInQue > 0)
      {
        if (Stat.cbInQue > Buf_Size)
            nNumberOfBytesToRead = Buf_Size;
          else
            nNumberOfBytesToRead = Stat.cbInQue;

		ReadFile(hComm, &Buffer_I[0], nNumberOfBytesToRead,
                 lpNumberOfBytesRead, NULL);
      }
      else
        *lpNumberOfBytesRead = 0;
    return TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
	hComm = CreateFile( "COM2",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);

			dcb.DCBlength = sizeof( dcb );

            dcb.BaudRate = CBR_9600;
            dcb.fParity = FALSE;
            dcb.Parity = NOPARITY;
            dcb.StopBits = ONESTOPBIT;
            dcb.ByteSize = 8;

            dcb.fDtrControl = DTR_CONTROL_ENABLE;
            dcb.fRtsControl = DTR_CONTROL_ENABLE;

            dcb.fOutxCtsFlow = FALSE;
            dcb.fOutxDsrFlow = FALSE;
            dcb.fDsrSensitivity = FALSE;
            dcb.fAbortOnError = FALSE;
            dcb.fOutX = FALSE;
            dcb.fInX = FALSE;
            dcb.fErrorChar = FALSE;
			dcb.fNull = FALSE;

			 if( SetCommState( hComm, & dcb ) ) MessageBox( NULL, "Udało się połączyć z portem COM1", "Inf", MB_ICONINFORMATION );
            else MessageBox( NULL, "Nie udało się połączyć z portem COM1", "Błąd", MB_ICONERROR );

if (hComm == INVALID_HANDLE_VALUE) {
		RichEdit1->Lines->Add("Could not open comm port.");
		return;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button2Click(TObject *Sender)
{


	//unsigned char hexx[6]={0x01,0x01,0x00,0x13,0x00,0x25};
	const char hexx[]="\x01\x01\x00\x13\x00\x25";
	char hex[8] = {0x01,0x03,0x00,0x00,0x00,0x03,0x05,0xCB};
	char hexo[6] = { '2', '5', '8' };
	AnsiString S2(hexo);
	//char hex[3]= "\x01\x03\x06";
	//strcpy(lpBuffor_write, &hex[3]);// Niech to będzie przykładowe polecenie dla urządzenia
	//WriteFile(hComm, lpBuffor_write, strlen(lpBuffor_write), &RS_ile, 0);
	WriteFile(hComm, hex, sizeof hex, &RS_ile, 0);





}
//---------------------------------------------------------------------------

void __fastcall TForm3::Button3Click(TObject *Sender)
{
	DWORD BytesRead;

	while(CommFlag) {
		Application->ProcessMessages();

		ReadFile(hComm, lpBuffor_read, 15, &RS_ile, NULL);

		if(RS_ile) {
			lpBuffor_read[BytesRead] = 0;
			//Memo1->Text=lpBuffor_read;
			//Label1->Caption=lpBuffor_read[10];
			//Edit1->Text=lpBuffor_read;
		}

	}


}
//---------------------------------------------------------------------------

void __fastcall TForm3::Button4Click(TObject *Sender)
{
	Label1->Caption=ReadFile(hComm, lpBuffor_read, 15, &RS_ile, NULL);
}
//---------------------------------------------------------------------------

void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
	//Write_Comm(hCommDev, strlen(Buffer_O));
	  Sleep(100);
	  //Beep();
	  FlushFileBuffers(hComm);
	  Read_Comm(hComm, &Number_Bytes_Read, sizeof(Buffer_I));
	  if (Number_Bytes_Read > 0)

      for(int i=0;i<7;++i) Str+=Format("%0.2X ",Buffer_I[I]);
	  Label1->Caption=Trim(Str);

		// RichEdit1->Text = Buffer_I;
		 //Edit1->Text = Buffer_I[1];
		// Edit1->Text = S2;
		 //Label1->Caption=sizeof(Buffer_I);
		// Label1->Caption + IntToHex(Buffer_I,2);
		 //Buffer_I[17]=0;
		 //Label1->Caption=AnsiString(Buffer_I);
		// RichEdit1->Text=Label1->Caption;


		 //Label2->Caption=S2;

}
//---------------------------------------------------------------------------

 

W

Kopiuj
void __fastcall TForm3::Button2Click(TObject *Sender)

wysyłam ramkę do RS232, a w

Kopiuj
void __fastcall TForm3::Timer1Timer(TObject *Sender)

chcę pobrac dane z Buffer_I i wświetlić w formie hexadecymalnej np Label.

dodanie znaczników <code class="cpp"> - @furious programming

edytowany 1x, ostatnio: flowCRANE
_13th_Dragon
Zapomniałeś podać treść błędu.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

W okolicach timer'a masz błąd wynikający z tego że absolutnie nie wiesz co robisz:

Kopiuj
if(Number_Bytes_Read>0)
  {
    AnsiString Str;
    for(int i=0;i<Number_Bytes_Read;++i) Str+=Format("%0.2X ",Buffer_I[i]);
    Label1->Caption=Label1->Caption+Str;
  }

Już chyba to mówiłem, ten projekt cię przerasta, zacznij od podstaw.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Podstawowy kurs programowania C++ zaczynam od stycznia.

WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Zostawiłem rozwiązanie z wyświetlaniem wyniku w postaci HEXadesymalnie w Label, Najwyraźniej jest z tym duży problem.

Zrobiłem to inaczej.

Kopiuj
 void __fastcall TForm3::Button5Click(TObject *Sender)
{
	 FILE *f = fopen("plik.txt", "w");
	 fprintf(f, "%0.2X,", Buffer_I[0]);
	 fprintf(f, "%0.2X,", Buffer_I[1]);
	 fprintf(f, "%0.2X,", Buffer_I[2]);
	 fprintf(f, "%0.2X,", Buffer_I[3]);
	 fprintf(f, "%0.2X,", Buffer_I[4]);
	 fprintf(f, "%0.2X,", Buffer_I[5]);
	 fprintf(f, "%0.2X,", Buffer_I[6]);
	 fprintf(f, "%0.2X,", Buffer_I[7]);
	 fprintf(f, "%0.2X,", Buffer_I[8]);
	 fprintf(f, "%0.2X,", Buffer_I[9]);
	 fprintf(f, "%0.2X,", Buffer_I[10]);
	 fprintf(f, "%0.2X,", Buffer_I[11]);
	 fclose(f);
}

W pliku dostaję

Kopiuj
01,03,06,00,00,00,23,00,FFFFFFEA,51,30,00, 

Prawie dobrze.
Tylko nie wiem skąd te FFFFFF.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1

To wartość ujemna, zmień typ na unsigned char
Odłóż ten projekt, jeszcze nie jest na twoi możliwości.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Dziękuje.

To pomogło.

_13th_Dragon
To drugie też pomoże.
WO
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Katowice
0

Zostawię jak tylko zamienię otrzymane liczny na dziesiętne.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)