Wie kann man den Hex-Wert eines Zeichen in ASCII in eine Textdatei schreiben?
Frage
Hier ist, was ich habe zur Zeit so weit:
void WriteHexToFile( std::ofstream &stream, void *ptr, int buflen, char *prefix )
{
unsigned char *buf = (unsigned char*)ptr;
for( int i = 0; i < buflen; ++i ) {
if( i % 16 == 0 ) {
stream << prefix;
}
stream << buf[i] << ' ';
}
}
Ich habe versucht zu tun stream.hex, stream.setf (std :: ios :: hex), sowie die Suche Google für ein bisschen. Ich habe auch versucht:
stream << stream.hex << (int)buf[i] << ' ';
Aber das scheint nicht zu funktionieren.
Hier ist ein Beispiel für einige Ausgabe, die es zur Zeit produziert:
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
Ich würde die Ausgabe wie wie folgt aussehen:
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00
Lösung
#include <iostream>
using namespace std;
int main() {
char c = 123;
cout << hex << int(c) << endl;
}
Edit: mit Null padding:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
char c = 13;
cout << hex << setw(2) << setfill('0') << int(c) << endl;
}
Andere Tipps
char upperToHex(int byteVal)
{
int i = (byteVal & 0xF0) >> 4;
return nibbleToHex(i);
}
char lowerToHex(int byteVal)
{
int i = (byteVal & 0x0F);
return nibbleToHex(i);
}
char nibbleToHex(int nibble)
{
const int ascii_zero = 48;
const int ascii_a = 65;
if((nibble >= 0) && (nibble <= 9))
{
return (char) (nibble + ascii_zero);
}
if((nibble >= 10) && (nibble <= 15))
{
return (char) (nibble - 10 + ascii_a);
}
return '?';
}
Weiterer code hier .
Versuchen:
#include <iomanip>
....
stream << std::hex << static_cast<int>(buf[i]);
Sie können auch tun mit ihm etwas ein bisschen altmodisch:
char buffer[3];//room for 2 hex digits and \0
sprintf(buffer,"%02X ",onebyte);
ich in der Regel eine Funktion machen, die die Ziffern zurückgibt und es einfach verwenden:
void CharToHex(char c, char *Hex)
{
Hex[0]=HexDigit(c>>4);
Hex[1]=HexDigit(c&0xF);
}
char HexDigit(char c)
{
if(c<10)
return c;
else
return c-10+'A';
}
CHAR auf wchar_t (Unicode) HEX Zeichenfolge
wchar_t* CharToWstring(CHAR Character)
{
wchar_t TargetString[10];
swprintf_s(TargetString, L"%02X", Character);
// then cut off the extra characters
size_t Length = wcslen(TargetString);
wchar_t *r = new wchar_t[3];
r[0] = TargetString[Length-2];
r[1] = TargetString[Length-1];
r[2] = '\0';
return r;
}
Sie müssen lediglich Ihren Stream konfigurieren einmal:
stream << std::hex << std::setfill('0') << std::setw(2)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow