在C中将结构转换为char *指针

时间:2015-08-10 06:27:53

标签: c struct uart char-pointer

我有一个结构:

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上打印缓冲区值。有可能吗?

2 个答案:

答案 0 :(得分:3)

我会这样做:

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 *作为序列化目标缓冲区的类型。

答案 1 :(得分:0)

将struct元素拆分并重新组合为char *字符串的另一种方法是使用字符串函数<iframe frameBorder="0" style="width:100%;height:100%;" scrolling="no" src="http://www.mynewplace.com/apartments-for-rent/st-paul-mn"> </iframe> 然后使用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;
}