0

私はコードのこの部分を持っています:

void query(hash_t* params) {
record_t* rec;

// Coordinator, opgroup and  Opcode  specified by the client
uint64_t netid = 0;
uint8_t op_code_group = 0;
uint8_t op_code = 0;
char* par;
now = mdl_now();
/* set the start and end time based on query parameters */
...........
// Network id is required
par = hash_get(params, "netid");
...........
netid = strtoull(par, NULL, 10);
par = hash_get(params, "opcode_group");
...........
op_code_group = strtoul(par, NULL, 10);
par = hash_get(params, "opcode");
...........
op_code = strtoul(par, NULL, 10);
/* seek in the bytestream */
mdl_seek(start);
while((rec = (record_t* ) mdl_next(&ts)) != NULL) {
    ...............
    // Only print records with the wanted net and opcodes
    if((netid != 0) && (netid != NTOHLL(rec->net_id))) 
        continue;
    if((opcode_group != 0) && (op_code_group != ntohl(rec->opcode_group))) 
        continue;
    if((opcode != 0) && (op_code != ntohl(rec->opcode)))
        continue;
    ..............
    mdl_print("%u %llu %u %u %u %d\n", 
        sec, 
        NTOHLL(rec->net_id), 
        rec->op_code_group, 
        rec->op_code, 
        rec->payloadlength, 
        val);
     }
 }

opcode_group、opcode、およびその他のパラメーターは、httpリクエストを介してクエリクラスに渡されます。

これが質問です。たとえば=160のようにopcode_groupを指定した場合、結果には何も表示されません。代わりに、opcode_group = 0(すべてのレコード)を指定すると、結果には、opcode_group=160のレコードを含むすべてのレコードが表示されます。

エラーはどこにありますか?どうもありがとうございます。

4

1 に答える 1

1

コードを見ると、「opcode_group」ではなく、変数「op_code_group」の値のみを取得していることわかります

op_code_group = strtoul(par, NULL, 10);

私はあなたが同じような変数をいじっていると信じています

_編集済み____ _ __

問題はこの部分にあると思います

if((opcode_group != 0) && (op_code_group != ntohl(rec->opcode_group))) 
    continue;"   

この部分は失敗し、opcode_group==0の場合にのみレコードを出力します

これをに変更します

if((opcode_group == 0) || (op_code_group != ntohl(rec->opcode_group))) 
    continue;"  

netidとop_codeでも同じ問題に直面していると思います

于 2013-03-06T12:32:59.563 に答える