代码之家  ›  专栏  ›  技术社区  ›  Http2inc

如何从内存中解析这些二进制数据?

  •  0
  • Http2inc  · 技术社区  · 2 年前
    #include <string.h>
    
    struct Market {
        char ticker[16];
        char price[5];
    };
    
    
    void parser(const void **ptr, struct Market arr) {
        char ticker[16];
        memcpy(arr.price, *ptr, 5);
        ptr = ptr + 4;
        int j = 0;
        while (1) {
            if (*ptr) {
                ticker[j] = *ptr;
                j++;
                ptr++;
            } else {
                break;
            }
        }
        strcpy(arr.ticker, ticker);
    }
    
    
    struct Market b;
    
    int main(void) {
        char a[20] = {'\xe7', 'h', '7', 'G', '\0','B', 'T', 'C', 'U', 'S', 'D', 'T', '\0'};
        parser(a, b);
        printf("  %s", b.ticker);
    }
    

    如何从内存中解析这些二进制数据?我是c.的新手。。以上代码无法编译。它有很多错误。我不能用fread,因为这是记忆。我要分析的数据是。。

    b':\x197GBTCUSDT\x00q\x0fOEETHUSDT\x00\x10\xea\xbbCBCHUSDT\x00\x9b\xe6]?XRPUSDT\x00\x92\xb3C@EOSUSDT\x00\xcfP\x03CLTCUSDT\x00\xc2Y\x8e=TRXUSDT\x00Qp?BETCUSDT\x00\n\x95\x87ALINKUSDT\x00\x16\x19n>XLMUSDT\x00\x83\xdd\x97?ADAUSDT\x00\x1d\x82XCXMRUSDT\x00\xa4\xf0\x03CDASHUSDT\x003sLCZECUSDT\x00\xd1={@XTZUSDT\x00\x81\xb6\xd8CBNBUSDT\x00Xk\xf2AATOMUSDT\x00D\xd2%?ONTUSDT\x00Y\x1de?IOTAUSDT\x00\xf5Ji?BATUSDT\x00t\x..
    

    我怎样才能解决这项困难的工作?

    0 回复  |  直到 2 年前
        1
  •  1
  •   pmatkov    2 年前

    如果某些东西没有改变,C标准已经定义,实现应该将字符定义为与有符号字符或无符号字符具有相同的范围、表示和行为。 \xe7 有一个十进制值237,超过了singed char的容量。这能行吗?还有一件事,路过 a (char*) ptr (void**) 那怎么行?或者,我误解了什么?