C++ 在一系列char*缓冲区中查找序列号?

C++ 在一系列char*缓冲区中查找序列号?,c++,c,gdb,C++,C,Gdb,我正在接收一个特定大小的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

我正在接收一个特定大小的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
我如何实现搜索序列号的想法?

试试:

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


编辑:一个可能更便于移植的更大变化是:

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


编辑:一个可能更便于移植的更大变化是:

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

这不是将字节转换为int的方式,而是尝试取消对内存中不存在的位置的指针的引用。尝试这样的操作:

这不是将字节转换为int的方式,而是尝试取消对内存中不存在的位置的指针的引用。尝试以下操作:

您犯了一个简单的错误:msg[i]返回位置i处的字符值。要获取它的地址,您应该使用msg+i或&msg[i]。 但对于某些不能读取未对齐单词的体系结构,此代码是不可移植的

阅读未对齐单词的最佳方法是使用压缩结构:

#pragma pack(1)
struct Header {
   uint32_t seq;
};
#pragma pack()

for (int i = 0; i < 30; ++i)
{
    const Header *h = (const Header *)(msg + i);
    cout << "seq" << i << " " << htonl(h->seq) << endl;
}
#pragma包(1)
结构头{
uint32_t seq;
};
#pragma pack()
对于(int i=0;i<30;++i)
{
常数头*h=(常数头*)(msg+i);

您可能会犯一个简单的错误:msg[i]返回位置i处字符的值。要获取它的地址,您应该使用msg+i或&msg[i]。 但对于某些不能读取未对齐单词的体系结构,此代码是不可移植的

阅读未对齐单词的最佳方法是使用压缩结构:

#pragma pack(1)
struct Header {
   uint32_t seq;
};
#pragma pack()

for (int i = 0; i < 30; ++i)
{
    const Header *h = (const Header *)(msg + i);
    cout << "seq" << i << " " << htonl(h->seq) << endl;
}
#pragma包(1)
结构头{
uint32_t seq;
};
#pragma pack()
对于(int i=0;i<30;++i)
{
常数头*h=(常数头*)(msg+i);
cout
charmsg[30];
对于(int i=0;i<30;i++)
msg[i]='\0';
char*iter_p=NULL;
iter_p=味精;
int i=0;
而(国际热核实验堆<&msg[30]){
国际热核试验堆;
cout
charmsg[30];
对于(int i=0;i<30;i++)
msg[i]='\0';
char*iter_p=NULL;
iter_p=味精;
int i=0;
而(国际热核实验堆<&msg[30]){
国际热核试验堆;

我可以不包括结尾只是为了清楚(我做了很多事情)。我忘记了&。我没有包括结尾只是为了清楚(我做了很多事情)。我忘记了&。
char msg[30];
for ( int i = 0; i < 30; i++ )
    msg[i] = '\0';

char *iter_p = NULL;
iter_p = msg;

int i = 0;
while ( iter_p < &msg[30] ) {

    uint32_t seq = *(uint32_t *)iter_p;
    cout << "seq" << i << "  " << seq << endl;
    iter_p += 4;
    i++;
}