如何从内存中解析这些二进制数据?
How can I parse these binary datas from memory?
#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', '[=10=]','B', 'T', 'C', 'U', 'S', 'D', 'T', '[=10=]'};
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..
我该如何解决这个困难的工作?
如果某些内容没有改变,C 标准已定义实现应将 char 定义为具有与 signed char 或 unsigned char 相同的范围、表示和行为。
\xe7
的十进制值为 237,超过了 singed char 的容量。这行得通吗?另一件事,将 a (char*)
传递给 ptr (void**)
,这怎么行得通?或者,我误解了什么?
#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', '[=10=]','B', 'T', 'C', 'U', 'S', 'D', 'T', '[=10=]'};
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..
我该如何解决这个困难的工作?
如果某些内容没有改变,C 标准已定义实现应将 char 定义为具有与 signed char 或 unsigned char 相同的范围、表示和行为。
\xe7
的十进制值为 237,超过了 singed char 的容量。这行得通吗?另一件事,将 a (char*)
传递给 ptr (void**)
,这怎么行得通?或者,我误解了什么?