我应该用c ++编写一个应该处理kad网络连接的库.我正在尝试构建一个与aMule&co使用的数据包一致的数据包.
而我真的无法理解这段代码之间的区别:
buffer = "\xe4\x20\x02";
Run Code Online (Sandbox Code Playgroud)
例如,这段代码:
char p_buffer[36];
p_buffer[0] = 0xe4;
p_buffer[1] = 0x20;
p_buffer[2] = 0x02;
buffer = p_buffer;
Run Code Online (Sandbox Code Playgroud)
(buffer是类的私有属性,而p_buffer是局部变量)
使用wireshark捕获数据包给了我不同的结果(第一个是我想要的,第二个没有),就像我做的小端/大端符号做错了,我猜...
为什么在类的构造函数中我不能像这样修改[private]"char*buffer":
buffer[0] = 0xe4;
Run Code Online (Sandbox Code Playgroud)
?(它不起作用,退出时没有任何追溯错误)
(如果它很重要,我正在使用crypto ++和boost库)
在此先感谢任何帮助_
您的第一个代码示例大致相当于:
static const char buffer_internal[4] = { 0xe4, 0x20, 0x02, 0x00 };
buffer = buffer_internal;
Run Code Online (Sandbox Code Playgroud)
这里的两个不同之处是:
您的第二个示例分配一个36字节的可修改缓冲区.然而,当超出范围时,所述缓冲区也将被丢弃 - 这里要非常小心,它在被释放后不会被使用.
至于第三个样本,如果它是指针,你初始化'缓冲区'吗?您没有提供足够的信息来真正诊断您的错误 - 完整的类声明和构造函数会有所帮助.
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |