簡體   English   中英

在C中將結構轉換為char *指針

[英]Converting Structure to char* pointer in C

我有一個結構:

struct K 
{
  char a[10];
  char b[10];
};

我希望將此結構轉換為char *指針並在Uart上打印該值。 Uart將char *指針作為輸入。

我的主要功能如下:

void main()
{
    struct K x= { "Hello","Pollo"};
    struct K *revert;
    char *buffer;
    buffer = (char *)&x;
    revert = (struct K *) buffer;
    printf("%s %s", revert->a,revert->b);
}

注意:printf()不起作用,我使用的是UART。

我想在將結構指針轉換為char *指針時在UART上打印緩沖區值。 有可能嗎?

我會喜歡以下內容:

void serialize(struct K x, char * dest)
{
  memcpy(dest,x.a,10);
  memcpy(&dest[10],x.b,10);
}

void deserialize(const char * src, struct K *x)
{
  memcpy(x->a,src,10);
  memcpy(x->b,&src[10],10);
}

因為你的結構里面有ASCII字符串。 如果你有其他數據類型,我可能會使用unsigned char *作為序列化目標緩沖區的類型。

將struct元素拆分並重新組合為char *字符串的另一種方法是使用字符串函數sprintf然后使用strncpy 有很多很多方法可以做到這一點。 簡單的指針算法會做等等。但這種方法相當簡潔明了:

#include <stdio.h>
#include <string.h>

struct K 
{
char a[10];
char b[10];
};

int main (void)
{
    char tmp[21] = {0};
    char *buf = tmp;
    struct K x = { "Hello","Pollo"};
    struct K rev = {{0},{0}};

    /* combine x.a & x.b into single string in buf */
    sprintf (buf, "%s%s", x.a, x.b);

    /* print the combined results */
    printf ("\n combined strings: %s\n\n", buf);

    /* get original lenght of x.a & x.b */
    size_t alen = strlen(x.a);
    size_t blen = strlen(x.b);

    /* copy from buf into rev.a & rev.b as required */
    strncpy (rev.a, buf, alen);
    strncpy (rev.b, buf+alen, blen);

    printf (" recombined: rev.a: %s  rev.b: %s\n\n", rev.a, rev.b);

    return 0;
}

產量

$ ./bin/struct2str

 combined strings: HelloPollo

 recombined: rev.a: Hello  rev.b: Pollo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM