c ++ cout uncasted memory(void)

jwb*_*ley 2 c++ casting cout

这就是场景;

// I have created a buffer
void *buffer = operator new(100)

/* later some data from a different buffer is put into the buffer at this pointer
by a function in an external header so I don't know what it's putting in there */

cout << buffer;
Run Code Online (Sandbox Code Playgroud)

我想打印出在这个指针放入缓冲区的数据,以查看输入的内容.我想将其打印为原始ASCII,我知道会有一些不可打印的字符,但我也知道一些易读​​的文字被推到了那里.

从我在互联网上看到的内容cout不能打印出像a的未发布数据void,而不是a intchar.但是,例如,编译器不会让我在运行中使用它(char).我应该创建一个单独的变量,在指针处转换值然后cout该变量,还是有一种方法可以直接执行此操作以保存另一个变量?

bam*_*s53 6

做类似的事情:

// C++11
std::array<char,100> buf;
// use std::vector<char> for a large or dynamic buffer size

// buf.data() will return a raw pointer suitable for functions
//   expecting a void* or char*
// buf.size() returns the size of the buffer

for (char c : buf)
    std::cout << (isprint(c) ? c : '.');
Run Code Online (Sandbox Code Playgroud)
// C++98
std::vector<char> buf(100);

// The expression `buf.empty() ? NULL : &buf[0]`
//   evaluates to a pointer suitable for functions expecting void* or char*

// The following struct needs to have external linkage
struct print_transform {
    char operator() (char c) { return isprint(c) ? c : '.'; }
};

std::transform(buf.begin(), buf.end(),
               std::ostream_iterator<char>(std::cout, ""),
               print_transform());
Run Code Online (Sandbox Code Playgroud)