C++读取内存地址上的一些字节,输出为字符串
C++ reading some bytes at a memory address, output as string
函数从未知DLL返回指针和长度(通过参数(。
Result = SpamnEggs( &pBytes, &nBytes )
指针指向有效的内存地址,该地址是 nBytes 的连续字节。这些字节包含文本的有效 ascci 值。没有空终止!
我的任务是在输出之前在通用C++代码(没有复杂的库或使用字节(中以尽可能少的简单操作"ovelay"某种字符串类型:
cout << sresult
添加:无需复制字节,因为这是一个必须遍历的大型缓冲区。
原型:
int SpamnEggs( void* pBytes, void* nBytes );
becomes
int SpamnEggs( char** pBytes, int* nBytes );
非常感谢大家。很棒的答案,一切都非常有效。
您可以复制原始内存并自行添加字符串终止字符:
char* newStr = new char[size + 1];
memcpy ( newStr, source, size );
newStr[size] = " ";
cout << newStr;
在不复制内存的情况下,您可以创建一个将指针和长度保存为成员的类,并重载流运算符以仅打印length
字符:
class MyString
{
void* _pBuf;
int _length;
public:
MyString(void* pBuf, int length)
{
_pBuf = pBuf;
_length = length;
}
friend ostream& operator <<(ostream &os,const MyString& obj);
};
ostream& operator <<(ostream &os,const MyString& obj)
{
const char* pChar = (const char*)obj._pBuf;
for ( int i = 0 ; i < obj._length ; i++ )
{
os << pChar[i];
}
return os;
}
用法示例:
char* x = "blablabla";
int length = 3;
MyString str(x,length);
cout << str;
你可以从指针和长度构造一个 std::string。
std::string sResult(pBytes, nBytes);
std::cout << sResult;
(假设pBytes
是一个char*
指针,否则你需要一个小的强制转换(。
像这样(未经测试的(代码怎么样:
class my_pointer_string
{
friend std::ostream &operator<<(std::ostream &, const my_pointer_string &);
public:
my_pointer_string(void *ptr, size_t len)
: m_pointer(ptr), m_length(len)
{ }
private:
void *m_pointer;
size_t m_length;
};
std::ostream &operator<<(std::ostream &os, const my_pointer_string &str)
{
char *string = reinterpret_cast<char *>(str.m_pointer);
for (size_t i = 0; i < str.m_length; i++)
os << *string++;
return os;
}
你需要做的是
a( 创建一些封装字符指针和大小的类。
b( 为该类编写一个<<运算符以将其内容输出到流。
编辑:与Bo Persson的回应相反,这并不意味着复制源数据。
相关文章:
- 如何在 c++ 中正确读取 GRC 块"Random Source"的字节输出数据到自己的 OOT 块中?
- 为什么int8_t的输出格式使用 4 个字节?
- 持续的字节输出计数器C
- 在减法期间将 C++ 转换为字节 (unit8_t) 不会像我预期的那样强制下溢;输出int16_t;为什么?
- 为什么以下程序中的输出为 12 字节,而总大小仅为 6 位
- 生成标准输出仅在 4098 字节输出后调用
- 以C++输出多字节字符串
- 读取并输出二进制文件(C++)中位置的字节
- c++.valgrind输出:Syscall param open(filename)指向不可修改的字节
- 与实际内存内容相比,GDB 内存检查输出偏差 8 个字节
- setw() 在包含 UTF-8 多字节字符/码位的字符串上输入错误的输出
- 输出二进制数据缺少一些字节
- 从文件输出原始字节时,第一个字节已损坏
- 如何将字节形式的输入写入输出文件
- 为什么我必须将一个字节强制转换为无符号两次才能看到十六进制输出
- C++读取内存地址上的一些字节,输出为字符串
- win32输出字节作为声音输入
- C++输入字节和输出十六进制
- 以十六进制表示法(0xABCDEF)将字节缓冲区的字节输出到控制台输出流
- 字节输出到二进制文件c++