繁体   English   中英

将数据的无符号字符指针转换为包含整数的结构

[英]Converting unsigned char pointer of data to struct containing ints

我正在尝试将此数据指针转换为我的struct ,并将实际值填充到结构中。

unsigned char *data = "00000001000000020000000300000004AE93KD93KD91Q830DMNE03KEkdaredgreenblueorangeyellow";

typedef struct mystruc {
    int a;
    int b;
    int c;
    int d;
} mystruc;

mystruct ms = (mystruct *)data;

printf("%i", ms->a);

输出:

808464432 

我想知道如何用实际值 1、2、3、4 填充abcd

我希望输出是:

1

我还需要稍后访问其余数据。

使用sscanf()解析字符串中的数字。

mystruct ms;
sscanf(data, "%8d%8d%8d%8d", &ms.a, &ms.b, &ms.c, &ms.d);

%8d表示将 8 个字符的十进制字段解析为int 如果它实际上是十六进制,请将其更改为%8x

您的代码将字符串中的字符代码解释为结构成员的二进制表示,它不会解析它。

您的unsigned char是一个字节宽,因此"00000001"将是十六进制的3030303031 ,因为'0'的 ASCII 代码是十六进制的0x30 ,而'1'的 ASCII 是0x31

您的int宽度为 4 个字节,因此它将捕获前 4 个字节的data ,即十六进制的30303030或十进制的808464432

然而,这将适用于小端机器:

#include <stdio.h>

typedef struct mystruct {
    int a;
    int b;
    int c;
    int d;
} mystruct;

unsigned char *data = "\1\0\0\0";  // use octal numbers, not ASCII, also note the reversed order

int main(void) {
 mystruct *ms = (mystruct *)data;

 printf("%i", ms->a); // outputs: 1
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM