10. november 2002 - 23:34Der er
4 kommentarer og 1 løsning
Konvertering af en char string til hexadecimal værdi??
Hej... håber I kan hjælpe mig.. måske er der en simpel løsning på mit problem. Jeg skal indlæse en fil og derefter konvertere char til deres tilhørende værdi hexadecimalt??
Findes der en standart funktion til dette? f.eks. Hex, hvis ja.. i hvilket bibliotek findes den og hvad skal funktionen have som argument?
ok... lækkert.. selvom HexDump ikke står beskrevet i min bog.. surt. Hvilket bibliotek ligger den i? Jeg bruger Dev-C++ som komplier, hvis jeg indsætter løsningen (direkte) får jeg følgende fejl : "[Linker error] undefined reference to `WinMain@16'"
Det ser ud til at du forsøger at kompilere en Windows applikation, men mangler at angive, hvor kompileren skal søge efter libraries. Jeg anvender ikke Dev-C++, så jeg ved ikke hvordan opsætningen skal være.
HexDump fungerer kun i en konsol applikation pga. printf. Eksempel:
#include <stdio.h> // Indsæt HexDump her ... int main(int argc, char * argv[]) { if (argc > 1) HexDump(argv[1]); return 0; }
Her er en konverteringsfunktion, der fungerer uden at anvende std library:
Indholdet af for-løkken ser måske lidt underlig ud, men tekststrengen med hex-tegnene kan betragtes som et array af char's så derfor er indeksering OK.
Hej "dilleberg".. nu ligger landet sådan, dette er en hovedbestand del i en opgave som jeg skal aflevere snart. umiddelbart kan jeg ikke få opgaven til at hænge ordenligt sammen, desuden kan jeg heller ikke nå at lære C med så lidt tid mellem hænderne.. Kunne du evt. have lyst til at lave opgave?
Opgave teksten lyder :
Opgaven går ud:
1. At skrive et program HEXADUMP i C, der kører under DOS og indlæser en vilkårlig fil (dvs. alle filtyper) og udskriver de enkelte bytes dels som hexadecimale tal i venstre side af skærmen og dels som text-ækvivalent i højre side af skærmen.
o Tip: Læs 16 byte af gangen (NB! Der kunne være fordele ved at bruge typen 'signed char') og skriv så disse ud igen til skærmen, dels som hexadecimale tal og dels som text-ekvivalenter.
o NB! Husk at der kun skal skrives max. 24 linjer ud af gangen (så du har en skærmfuld) - og der må også gerne lige være et mellemrum mellem den hexadecimale del og text-delen af skærmen)
Programmet skal kunne indlæse en fil, hvor input filnavnet indlæses som parameter (både fra kommando-linje eller fra programmet). Kommando-linjen HEXADUMP ? eller HEXADUMP HELP/help
Skal på skærmen fremkalde en hjælpetekst, der beskriver programmets funktion.
Programmet skal spørge, om der skal udskrives en fil i ASCII-format, hvis navn indlæses under program-kørslen. Eksistensen af både input og output-filer kontrolleres, og passende fejludskrifter/meddelelser skrives på skærmen 6. Desuden skal programmet lave et "Fingerprint" af filen, dvs. For hver 1024 bytes i filen skal følgende ske:
o Alle de 1024 bytes er blevet adderet.
o Værdien af denne adderede værdi modulo 16 skrives ud til en ny fil. Et tal modulo 16 vil sige, at tallet divideres med 16 og divisionsresten er resultatet.
o Resultatet skrives som en sekvens af hexadecimale værdier, og altså en fro hver 1024 byte
Også eksistensen af denne output-fil kontrolleres, og passende fejludskrifter/meddelelser skrives på skærmen
signed char felt; int tabel [16]; /*heri lægges 16 indlæste bytes - skal vel være char */ int i; /*index*/ int j; /*index*/ int count; /*tæller*/ int mod16; /*heri lægges resultat af beregning*/ long int sum; /*sum af 1024 bytes*/
if ((fpt1 = fopen (argv[1],"rb")) == NULL) /*input fil åbnes*/ printf ("\nFejl - kan ikke finde filen\n"); if ((fpt2 = fopen (argv[1],"w")) == NULL) /*output fil åbnes*/ printf ("\nFejl - kan ikke finde filen\n");
count = 0; sum = 0; mod16 = 0; do while for (j=1; j<=24;j++) /*der skal udskrives 24 linier*/ { for (i=0; i<=15;i++) /*der skal indlæses 16 bytes*/ { felt = getc (fpt1); tabel[i]=felt; /*her skal der måske være "end of file"*/ sum = sum + tabel[i]; count = count+1; if (count = 1024) { mod16 = sum % 16; /*beregn modulo 16*/
//putc()Hvordan skriver man på fil ?? /*skriv mod16 på output fil*/
count = 0; /*count nulstilles*/ } }
printf ("%2X", tabel); /* her skrives den hexadecimalt*/ printf (" "); /*her skrives en blank*/ printf ("%16c", tabel); /*her skrives 16 indlæste bytes*/
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.