» BIN File rückwärts lesen

C PointerNeuen Thread eröffnenNeue Antwort erstellenTXT in BIN ?
AutorNachricht
Beobachter 
Anmeldedatum: 09.02.2021
Beiträge: 3
09.02.2021, 12:37
zitieren

Hallo!

Ich bin noch ganz unerfahren in C und stehe bei einem Problem.

ich habe ein BIN datei mit der Range von 0x0 - 0x7FF0, ich möchte mir den Inhalt in einer neuen BIN spiegelverkehrt und rückwärts ausgehen lassen.

Bsp

0x0 FFFFFFFFFFFFFFFF5555555555555555
0x10 55555555510000AE60780027FFFFFFFF
usw.

sollte dann so aussehen

0x7FE0 FFFFFFFF60780027510000AE55555555
0x7FF0 5555555555555555FFFFFFFFFFFFFFFF

kann mir da jemand helfen ?.

Danke Chris


pn
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
10.02.2021, 14:38
zitieren

Hallo chris2012
Wenn du nur die Bytes rückwärts ausgeben willst ist das weniger ein Problem.
Das wäre eine Datei mit 32753 Bytes.
Du allokierst einen Speicher dafür und liest die Datei ganz gewöhnlich ein und
gibst den Inhalt rückwärts wieder aus.
Wenn du aber die Bytes auch umdrehen willst wird es etwas komplizierter:

gegeben:
01011011
soll:
11011010

Dann musst du die Bytes als signed char zu unsigend char konvertieren:

//Umwandlung von signed char zu int
int atoint(char letter)
{
 int rewer;
 if ( letter < 0)
  rewer = letter + 256;
   else rewer = (int)letter;
 return rewer;
}
Den Return-Value dieser Funktion kannst du locker zu unsigned char casten.
Danach das unsigend char in einen String


//Das erste Argument ist die umzuwandelnde Zahl(0-255) das zweite der String
// in dem die Binärzahl dargestellt wird
void buzubin(unsigned int letter, char wort[])
{
unsigned int slei, dum, testwert;
 if ((letter >= 0) || (letter <= 255))
  {
   /* Ininitalisert die 8 Binärstellen mit Null */
   for (slei = 0; slei <= 11; slei++)
    wort[8] = '\0';

   for (slei = 0; slei <= 7; slei++)
    {
     testwert = 128 >> slei;  /* Bit7(128dez) ist auf Char-Nr.0 */
     dum = letter & testwert;
     if (dum != 0)  wort[slei] = '1';
      else          wort[slei] = '0';
    }
  }
}

den du dann rückwärts ausgibst.

So wie du dir das denkst sieht das im Prinzip so aus:

#include <iostream>
#include <iomanip>

void buzubin(unsigned int letter, char wort[])
{
unsigned int slei, dum, testwert;
 if ((letter >= 0) || (letter <= 255))
  {
   /* Ininitalisert die 8 Binärstellen mit Null */
   for (slei = 0; slei <= 11; slei++)
    wort[8] = '\0';

   for (slei = 0; slei <= 7; slei++)
    {
     testwert = 128 >> slei;  /* Bit7(128dez) ist auf Char-Nr.0 */
     dum = letter & testwert;
     if (dum != 0)  wort[slei] = '1';
      else          wort[slei] = '0';
    }
  }
}


int main(int argc, char **argv)
{
   
int i; 
char sollbin[12] = {0}; 
char istbin[12] = {0};         
 
int ist[32] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
               0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x00, 0xAE, 0x60, 0x78, 0x00, 0x27, 0xFF, 0xFF, 0xFF, 0xFF};
               // FF FF FF FF 60 78 00 27 51 00 00 AE  55 55 55 55
int soll[32] ={0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x78, 0x00, 0x27, 0x51, 0x00, 0x00, 0xAE, 0x55, 0x55, 0x55, 0x55,
               0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

 
 std::cout << "Bintest" << std::endl;
 for (i = 0; i < 32; i++)
  {
   buzubin(ist[i], istbin);
   buzubin(soll[i], sollbin);
   std::cout << "i=" << std::setw(2) << i << "  ist= " << std::setw(3) <<  ist[i] << "  " << istbin;
   std::cout << "   soll= " << std::setw(3) << soll[i] << "  " << sollbin << std::endl;
  }   

    return 0;
}


Daraus wird dann diese Ausgabe:
Bintest
i= 0 ist= 255 11111111 soll= 255 11111111
i= 1 ist= 255 11111111 soll= 255 11111111
i= 2 ist= 255 11111111 soll= 255 11111111
i= 3 ist= 255 11111111 soll= 255 11111111
i= 4 ist= 255 11111111 soll= 96 01100000
i= 5 ist= 255 11111111 soll= 120 01111000
i= 6 ist= 255 11111111 soll= 0 00000000
i= 7 ist= 255 11111111 soll= 39 00100111
i= 8 ist= 85 01010101 soll= 81 01010001
i= 9 ist= 85 01010101 soll= 0 00000000
i=10 ist= 85 01010101 soll= 0 00000000
i=11 ist= 85 01010101 soll= 174 10101110
i=12 ist= 85 01010101 soll= 85 01010101
i=13 ist= 85 01010101 soll= 85 01010101
i=14 ist= 85 01010101 soll= 85 01010101
i=15 ist= 85 01010101 soll= 85 01010101
i=16 ist= 85 01010101 soll= 85 01010101
i=17 ist= 85 01010101 soll= 85 01010101
i=18 ist= 85 01010101 soll= 85 01010101
i=19 ist= 85 01010101 soll= 85 01010101
i=20 ist= 81 01010001 soll= 85 01010101
i=21 ist= 0 00000000 soll= 85 01010101
i=22 ist= 0 00000000 soll= 85 01010101
i=23 ist= 174 10101110 soll= 85 01010101
i=24 ist= 96 01100000 soll= 255 11111111
i=25 ist= 120 01111000 soll= 255 11111111
i=26 ist= 0 00000000 soll= 255 11111111
i=27 ist= 39 00100111 soll= 255 11111111
i=28 ist= 255 11111111 soll= 255 11111111
i=29 ist= 255 11111111 soll= 255 11111111
i=30 ist= 255 11111111 soll= 255 11111111
i=31 ist= 255 11111111 soll= 255 11111111

So wie du das in deinen Beispielen dargestellt hast, stimmt das weder nur bei Byte-weiser
Darstellung, noch in der Bit-weisen Darstellung

Mit dieser Funktion kannst du eine als c- String dargestellte Binärzahl in eine
Dezimalzahl umwandeln:

/* Die Funktion binzuza wandelt Binärwerte die als Strings gespeichert sind,
 * in Dezimalzahlen um. Die erste Schleife dient zum feststellen der Stringlaenge
 * ----------------------------------------------------------------------- */
void binzuza(unsigned int (*letter), char wort[])
{
unsigned int slei, ende, dumsm, dumza = 0, testwert = 1;

/* Stelle die Stringlänge von wort fest*/
 for (ende = 0; ende <= 8; ende++)
  if (wort[ende] == '\0') break;

 testwert<<= (ende - 1); /* Anpassung von testwert an Stringlaenge */

 for (slei = 0; slei <= (ende - 1); slei++)
  if ((wort[slei] == 'I') || (wort[slei] == '1'))
   {
    dumsm = testwert >> slei;
    dumza += dumsm;
   }
 (*letter) = dumza;
}



Offen gesagt habe ich das auch noch nicht gelesen, eine Datei zu verschlüsseln, in dem man
diese byteweise oder bitweise rückwärts abspeichert.


 2x  bearbeitet
pn
Beobachter 
Anmeldedatum: 09.02.2021
Beiträge: 3
17.02.2021, 06:18
zitieren

Hi, super danke hat bestens geklapppt :-)

pn
Gast 
17.02.2021, 06:18
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "BIN File rückwärts lesen" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
drehzahlschwankung?????lesen lesen..
kann mir einer sagen wieso ,wenn ich hier rum drehe auch die drehzahl sich verändert???? habe standgas probleme, habe bemerckt das wenn ich diese schraube rein drehe , mein standgas noch mieser und unrund leuft, wozu ist das teil da an der...
von ACURA-HSC
18
4.428
29.03.2006, 20:06
ACURA-HSC
 Random File Generator
Mit diesem Generator kann man sich eine gewünschte Anzahl von Dateien mit zufälligem Inhalt generieren...
[Allgemein]von mgutt
2
373
17.11.2017, 18:17
mgutt
Jackson-Host.de ...your File Hoster!
Möcht mal wissen, was Ihr zu meiner Seite http://jackson-host.de denkt :suspekt: THX für...
von Jackson90
11
899
24.07.2007, 16:23
McKinley
Hochgeladen .docx werden als ZIP-File geöffnet
Hallo zusammen, ich habe folgendes Problem. Wenn ich Word 2007 Dateien mit dem Format .docx hochlade und sie nachher wieder öffnen will, werden sie als ZIP-File angezeigt und auch runtergeladen. Kann mir jemand bei diesem Problem helfen? Ich habe...
von ball87
0
428
22.07.2011, 13:28
ball87
Sound File von meinem Honda Civic ED7 !!
hallo also da mal ein sound file von meinem Honda Civic ED7 aber ist leider nur mit dem Handy aufgenommen worden und auch leider nur mit dem real player zum abspielen !! aber ich versuch es noch besser zu machen...
von BlackHondaDevil
0
912
27.10.2005, 15:43
BlackHondaDevil
Consultant (m/w/d) PRO.FILE | CIDEON Software & Services GmbH & Co. KG
Bewerben Sie sich bis zum 15.09.2023. Jetzt bewerben!(https://api.relaxx.center/r/ab4610332ae24fae8ed6de4097a95f52?pid=1922145&mpid=1270751&prid=1021081&tid=30) Zur Stellenanzeige auf Mein IT Job(https://s.jobboarddeutschland.de/1d55) Ihre...
[Allgemein]von kimjob
0
60
24.07.2023, 11:57
kimjob
Consultant (m/w/d) PRO.FILE | CIDEON Software & Services GmbH & Co. KG
Bewerben Sie sich bis zum 15.08.2023. Jetzt bewerben! (https://api.relaxx.center/r/e7863e69dbe94c908463bac7a43c1e95?pid=1890239&mpid=1260793&prid=1021081&tid=30) Zur Stellenanzeige auf Mein IT Job (https://s.jobboarddeutschland.de/1bql) Ihre...
[Jobs & Stellenangebote]von kimjob
0
111
26.06.2023, 15:32
kimjob
Consultant (m/w/d) PRO.FILE | CIDEON Software & Services GmbH & Co. KG
Bewerben Sie sich bis zum 09.06.2023. Jetzt bewerben! Zur Stellenanzeige auf Mein IT Job Ihre Bewerbung richten Sie bitte ausschließlich an die ausgeschriebene Firma. ________ Für unsere bundesweiten Standorte suchen wir Sie zum nächstmöglichen...
[Jobs & Stellenangebote]von kimjob
0
143
18.04.2023, 17:27
kimjob
 Internal / Local File Inclusion - Angriff über Bilder-Upload
Hier wird ausführlich erklärt wie man innerhalb eines Bildes php-Code platziert. Danach muss man nur noch eine Lücke im System finden, die es erlaubt lokale Dateien in einem Script einzubinden. Ich schaue gerade, ob ich einen Filter dafür...
[PHP]von mgutt
1
2.346
08.02.2008, 07:27
mgutt
Warnung: is_dir(): open_basedir restriction in effect. File(/tmp) is not within the allowed path...
Moin zusammen, ich kriegs nicht gebacken ... :) und brauch Eure Hilfe... aus Spaß an der Freude und Neugier hatte ich mir ohne viele Kenntnisse ne Mediawiki eingerichtet. Hatte alles funktioniert. Als ich die Seite nach langer Zeit wieder öffnete...
von Zicke
0
103
24.12.2016, 01:09
Zicke
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |