这就是场景;
// 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 int或char.但是,例如,编译器不会让我在运行中使用它(char).我应该创建一个单独的变量,在指针处转换值然后cout该变量,还是有一种方法可以直接执行此操作以保存另一个变量?
做类似的事情:
// 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)