问题描述
我有const void*
形式的Base64编码数据。当我使用WriteFile()
函数将数据写入文件时,数据将以正确的格式写入。但是,当我尝试使用std::cout
打印(直接打印或将其强制转换为char*
后)时,格式是不同的/不需要的。因此,我更改了传递给HANDLE
的{{1}},以将正确的输出打印到控制台,并且可以正常工作。
有什么办法可以保存/重定向字符串(或char数组)中的等效数据?我尝试搜索WriteFile()
,以使用HANDLE
将输出写入字符串变量,但到目前为止仍未成功。这是代码:
WriteFile()
WriteFile()函数:
void Write(const void* data,int size)
{
/* filePath is a local variable here */
HANDLE mFile = CreateFileA(filePath,FILE_APPEND_DATA,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_norMAL,NULL);
if ((mFile != NULL) && (size > 0))
{
std:: cout << data; // incorrect/undesired output
char* stringData = (char *)data;
std::cout << stringData; // incorrect/undesired output
DWORD bytesWritten = 0;
/* Writes output to the file */
WriteFile(mFile,data,static_cast<DWORD>(size),&bytesWritten,NULL);
/* Writes output to the console */
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(hStdOut,NULL);
}
}
以下是所需的输出(以base64编码):
这是我们尝试使用BOOL WINAPI WriteFile(
_In_ HANDLE hFile,_In_ LPCVOID lpBuffer,_In_ DWORD nNumberOfBytesToWrite,_Out_opt_ LPDWORD lpNumberOfBytesWritten,_Inout_opt_ LPOVERLAPPED lpOverlapped
);
直接打印数据时的输出(不正确/不需要)
解决方法
std:: cout << data;
打印由于data
的类型为void*
(或更确切地说为const void*
)而传递的地址。
char* stringData = (char *)data;
std::cout << stringData;
要求数据写入NUL终止。
您可以使用write()
函数将字节流放入std::basic_ostream
(包括std::cout
)中。
std::cout.write(reinterpret_cast<const char*>(data),size);