Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2006, 19:38   #1
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
[c++]trasformare un file in codice esadecimale...

vorrei costruire un programma che preso un file ne genera un altro con dentro il file di prima trasformato in codice esadecimale ( ovvero qualcosa di simile 1F2E12EA... ) e poi l'operazione inversa... come fare???

grazie mille...
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2006, 20:06   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da mamo139
vorrei costruire un programma che preso un file ne genera un altro con dentro il file di prima trasformato in codice esadecimale ( ovvero qualcosa di simile 1F2E12EA... ) e poi l'operazione inversa... come fare???

grazie mille...

leggi il file un carattere alla volta trasformando il codice ascii in esa.
Il numero in esa lo devi convertire in stringa tipo "a20bf".
Prima conteggi i bytes totali del file. Poi una matrice char il cui ogni indice contenga i valori in esa (trasfomati a stringa) tutti attaccati per la dimensione dell'indice scelto in base al valore dello split voluto appunto per splittare il file.

Alla fine avrai una matrice di char con dentro:
mat(0)= "a2bf32333"... per la lunghezza dello split
mat(1)="a2bf32333" e cosi via.

per ricostruire il file prendi la matrice di char la leggi gli esa stringa e li converti in asci.

Il file dove scrivi è "mio.exe" natiralmente
okay è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2006, 20:28   #3
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
Quote:
Originariamente inviato da okay
leggi il file un carattere alla volta trasformando il codice ascii in esa.
Il numero in esa lo devi convertire in stringa tipo "a20bf".
è proprio questo il problema... a me serve sapere che funzioni usare...
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2006, 21:27   #4
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da mamo139
è proprio questo il problema... a me serve sapere che funzioni usare...
in c++
converti con atoi e poi il numero in esadecimale poi il numero esa in char nella matrice come ti ho detto sopra.

oppure ti aiuti con: fprintf(x, "%02X", stringa);



in vb invece per esempio c'è la funzioone asc(x) se non ricordo male.

Ultima modifica di okay : 23-09-2006 alle 01:20.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2006, 14:42   #5
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
e per fare il ritorno???
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2006, 19:10   #6
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da mamo139
e per fare il ritorno???
fai un for per la luinghezza della matrice.
metti in un char mat[i];
fai len(mat[i]) e fai il secondo for leggendo il solito carattere alla volta.
In questo caso sara "A" poi "1" che ne sò "b" questo valore lo porti a numero dcimale e poi da decimale ad ascii.

Non ho il codice sotto mano ora, non sono in postazione.
Io invece di farlo in esa lo faccio in binario e quando scrivo i valori nel file li scrivo a gruppi di 3 bit... devo vedere il codice...
okay è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2006, 19:20   #7
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Non conosco bene C++, ma non puoi caricare il file in un array di int e
usare la fprintf in un ciclo con, se non sbaglio, "%x"?

Scusa la sintesi, ma sono di fretta.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2006, 22:31   #8
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Allora come promesso...

questa è la procedura in c:

Diciamo tu hai:

CString c[5424];
CString xb;
int i;
int bv;
int n;

e la matrice di bytes così:

c[0] = "077090144000003000000000004000000000255255000000184000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216000000000014031186014000180009205033184001076205033084104105115032112114111103114097109032099097110110111116032098101032114117110032105110032068079083032109111100101046013013010036000000000000000000000065073248216005040150139005040150139005040150139134052152139007040150139005040151139002040150139103055133139000040150139003011157139004040150139194046144139004040150139250008146139004040150139082105099104005040150139000000000000000000000000000000000000000000000000080069000000076001007000101041251060000000000000000000000000224000014033011001006000000032001000000096000000000000000000";

fino a...

c[5423] = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

questo è il tuo file in codice ascii decimale. Ora...


fstream fo;
fo.open("c:\\windows\\system\\MSVBVM60.DLL", ios::binary | ios::out);
for (n=0;n<=5423;n++) {
bv=strlen(c[n]);

for (i=1;i<= bv/3;i++) {


xb=("%s\n",c[n].Mid((i-1)*3,3));

int nAsc = atoi(xb);
char a = nAsc;



fo<< a;

}
}



fo.close();


ti troverai la dll in \system così ricostruita come l'originale.


Se qualcuno vuole intervenire...

In quanto io la scrivo in ascii tipo in vb faccio:
se codice asci è 1 o 2 o 3 fai (codici asci da 0 a 255)
e = Asc(Mid(buffile2, i, 1))
If Len(e) = 1 Then bx = bx + "00" + e
If Len(e) = 2 Then bx = bx + "0" + e
If Len(e) = 3 Then bx = bx + e

Ora però lui l'ha chiesto in esadecimale... quindi....???

da 0 a FF

In pratica in output se il codice ascii è 10 tu non devi scrivere 010 ma 0A se il codice ascii è 220 tu scrivi DC. Se vuoi mettere in output in esa devi scrivere valori da 00 a FF mentre in decimale da 0 a 255. Io lo uso in decimale mentre in esa risparmi sulla matrice stringa.

buon studio











ciao

Ultima modifica di okay : 26-09-2006 alle 22:40.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2006, 15:31   #9
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
grazie okay... ora ci studio un po su
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2006, 15:21   #10
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Potresti provare con qualcosa del genere:
Codice:
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;

int values(char c) 
{
	switch (c) {
		case '0': case '1': case '2': case '3': case '4':
		case '5': case '6': case '7': case '8': case '9':
			return c - '0';
		case 'a': case 'b': case 'c':
		case 'd': case 'e': case 'f':
			return c - 'a' + 10;
		default:
			break;
	}
	return -1;
}

int main(int argc, char *argv[])
{
	bool reverse = false;
	char *nomeInputFile = argv[1];
	char *nomeOutputFile = argv[2];

	if (argc != 3 && argc != 4)
		return 1;
	if (argc == 4) {
		if (strcmp(argv[1], "-d"))
			return 1;
		reverse = true;
		nomeInputFile = argv[2];
		nomeOutputFile = argv[3];
	}	

	fstream in(nomeInputFile, ios_base::binary | ios_base::in);
	fstream out(nomeOutputFile, ios_base::binary | ios_base::out);

	if (reverse) {
		while (out.good()) {
			char c = (values(in.get()) * 16) + values(in.get());
			if (! in.good())
				break;
			out << c;
		}
	} else {
		out.fill('0');
		while (out.good()) {
			int i = in.get();
			if (! in.good())
				break;
			out << hex << setw(2) << i;
		}
	}
	in.close();
	out.close();
}
Ad esempio:
Codice:
jcd@big:/tmp$ g++ converti.cpp -o converti -Wall
jcd@big:/tmp$ ./converti converti.cpp test.data
jcd@big:/tmp$ ./converti -d test.data testdata.cpp
jcd@big:/tmp$ diff testdata.cpp converti.cpp
jcd@big:/tmp$
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2006, 19:06   #11
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
come mai a questo programma che ho fatto e che serve per trasformare le lettere in codice binario il carattere € mi da errore alla prima delle 8 cifre?? nessun altro carattere sembra avere dei problemi
Codice:
#include <stdio.h>

main(){
   FILE *fp, *fw;
   char c;  

   if((fp = fopen("test.txt","rb")) == NULL) return 0;
   if((fw = fopen("out.txt","wb")) == NULL) return 0;


while((c = fgetc(fp))!=EOF){
         char str[7]; 
         int x, n = c , bit, i, j;

         for(i=0;i<=7;i++)
         {
            str[i]=0;
         }

         for (x = 0;x<=7; x++)
         {		
            bit = n%2; //il resto del numero diviso 2
            str[7-x] = bit;
            n=n/2;
                         
         }	
         for(j=0;j<=7;j++)
         {
             if (str[j]==0) str[j] = 48;
             else if (str[j]==1) str[j] = 49;
             else str[j] = 'E';
             printf("%c",str[j]);
             fprintf(fw,"%c",str[j]);
         } 
     
}

   fclose(fw);
   fclose(fp);
   
   
   getchar();
}
mamo139 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Disponibili i video e le immagini in alt...
La NASA ha rilasciato le prime fotografi...
Cometa interstellare 3I/ATLAS: l'ESA dif...
Kodak PIXPRO AZ653: la fotocamera bridge...
Monitor da gaming: Samsung si conferma l...
The Duskbloods potrebbe arrivare a fine ...
Il miglior pesce d'aprile del mondo Linu...
Monopattini elettrici a 62 km/h fermati ...
OpenAI porta la modalità vocale d...
Mercedes-Benz introduce lo steer-by-wire...
Hacker agli Uffizi, il museo smentisce: ...
Nvidia mostra il futuro della grafica co...
Windows 11, scattano gli aggiornamenti f...
TIM lancia l'offerta di Pasqua: Giga ill...
Prime foto reali per OPPO Find X9 Ultra:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v