c++ - 在一系列 char* 缓冲区中寻找序列号?

标签 c++ c gdb

我正在接收一个特定 size_t len 的 const char* msg 类型流。在某个字节偏移处有一个序列号(32 或 64 字节,我不确定是哪个)所以我的想法是每次收到其中一个消息时执行以下操作:

for (int i = 0; i < 30; ++i)
{
    uint32_t seq = *(uint32_t*) msg[i];
    cout << "seq" << i << " " << seq << endl;
}
//and similar for 64 bytes

以便之后我可以将具有相同偏移量的行分组,并查看哪个偏移量 i 给我顺序输出。这个问题是我对以下内容进行了段错误:

(gdb) p *(uint32_t*) msg[i]
Cannot access memory at address 0x2d

如何实现我的序列号搜索小想法?

最佳答案

尝试:

uint32_t seq = *(uint32_t*) &msg[i];

(gdb) p *(uint32_t*)&msg[i]


编辑:一个更大的变化,可能更便携是:

uint32_t seq;
memcpy(&seq, msg + i, sizeof(seq));
seq = ntohl(seq);

关于c++ - 在一系列 char* 缓冲区中寻找序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459667/

相关文章:

c++ - 使用 pocolibrary 下载二进制文件

c - 用C写shell,如何区分交互模式和批处理模式

c++ - gdb fork() 在 Linux 上执行

c++ - this 和 this@entry 的区别?

c++ - C++ Builder 中的 POCO 库

C++ 错误 : undefined reference to . .. & 的多重定义

c - 使用f2c后链接

c++ - Visual Studio C/C++ 如何与远程设备一起工作?

redirect - GDB 打印到文件而不是标准输出

c++ - 取消定义已经包含的标题