这是我目前所拥有的:
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] << ' '; } }
我已经尝试过做stream.hex,stream.setf(std :: ios :: hex),以及搜索一下Google.我也尝试过:
stream << stream.hex << (int)buf[i] << ' ';
但这似乎也不起作用.
以下是它当前生成的一些输出的示例:
Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í
我希望输出看起来如下所示:
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
小智.. 30
#includeusing namespace std; int main() { char c = 123; cout << hex << int(c) << endl; }
编辑:零填充:
#include#include using namespace std; int main() { char c = 13; cout << hex << setw(2) << setfill('0') << int(c) << endl; }
这就是为什么我喜欢*C++流:cout << hex << setw(2)<< setfill('0')<< int(c)<< endl只是*so*比printf更清晰("% 02x",c);-)我知道它的类型安全(呃)但他们不能梦想一些不那么奇怪的东西吗? (4认同)
清晰度是一个观点问题......我不认为printf("%02x",c)可以被视为"清晰" (4认同)
如果c <0,您可能希望使用无符号(c)而不是int(c). (2认同)
McDowell.. 7
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 '?'; }
这里有更多代码.
#includeusing namespace std; int main() { char c = 123; cout << hex << int(c) << endl; }
编辑:零填充:
#include#include using namespace std; int main() { char c = 13; cout << hex << setw(2) << setfill('0') << int(c) << endl; }
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 '?'; }
这里有更多代码.