簡體   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