我想转换一个字节数组(包含64个元素),如下所示:
9b b4 f5 b0 67 3c f8 e1 f1 f8 02 8c b2 13 4d 66 f0 72 a0 05 ...
到一个字符串。像“9bb4f5b067 .....”这样的东西。本质上我想将这个字节数组写入CFile
,我意识到最简单的方法是将字节数组转换为字符串,然后编写内容。每当我尝试将数组转换为字符串时,我会得到一些特殊字符,当我尝试将字节数组直接写入文件时,我会看到文件中写入的特殊字符。有什么建议吗?
以下是代码:pbSignature
类型为PBYTE
,打印方式如下:
printf("The signature is: ");
for (DWORD i = 0 ; i < cbSignature ; i++)
{
printf("%2.2x ",pbSignature[i]);
}
// Imprint the signature to the CRC file
if (!file.Open(crcFilePath, CFile::modeWrite, NULL))
{
printf("File could not be opened %d\n");
goto Cleanup;
}
for (DWORD i = 0 ; i < cbSignature ; i++)
{
//printf("size of pbsig is %d and value of pbsig is %d\n",sizeof(pbSignature[i]),pbSignature[i] );
file.Write(&pbSignature[i],sizeof(pbSignature[i]));
//printf("%2.2x ",pbSignature[i]);
}
答案 0 :(得分:2)
您可以直接将字节数组内容作为原始字节序列写入二进制文件 您可以使用CFile::Write()方法,例如
// 'file' is an instance of CFile, and is already opened for writing
file.Write(yourBufferPointer, yourBufferSize);
如果要将字节数组的内容写为十六进制数字序列(将文件视为 text 文件),您可以简单地定义一个辅助函数来转换{{1转换为包含字节十六进制表示的字符串。然后,您可以遍历输入数组,将每个字节转换为十六进制字符串,并将字符串内容打印到文件中。
这是一个这样的转换函数的例子,在控制台中打印十六进制字节序列:
BYTE
在控制台中编译并运行测试:
#include <stdio.h> // For sprintf_s() #include <iostream> // For console output #include <string> // For std::string #include <Windows.h> // For Win32 Platform SDK (for BYTE definition) using namespace std; string byteToHexString(BYTE b) { char hexBuf[3]; // One byte in hex is 2 digits, plus NUL string terminator. sprintf_s(hexBuf, "%02X", b); return hexBuf; } int main() { BYTE buffer[] = {0x11, 0x22, 0x33, 0xAA, 0xBB, 0xFF}; for (size_t i = 0; i < sizeof(buffer); ++i) { cout << byteToHexString(buffer[i]) << ' '; } cout << endl; }
如果你想一次将整个二进制数组转换成一个字符串,你可以定义一个这样的函数(请注意,如果二进制文件很大,这不是很好;在这种情况下,它会更好遵循先前的convert-single-bytes-and-write-each-byte-to-file方法):
C:\Temp\CppTests>cl /EHsc /W4 /nologo test.cpp
test.cpp
C:\Temp\CppTests>test.exe
11 22 33 AA BB FF
答案 1 :(得分:1)
你可能想要这个:
unsigned char bytes[] = {0x9b, 0xb4, 0xf5, 0xb0 } ; // your array of bytes
string st ;
for (int i = 0; i < sizeof(bytes)/sizeof(bytes[0]); i++)
{
char buff[4];
sprintf(buff, "%02x", (unsigned char)bytes[i]) ;
st = st + buff ;
}
// now st contains "9bb4f5b0"
答案 2 :(得分:0)
将您的字节数组转换为base64字符串,这将使其可读: