将结构转换为 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 上打印缓冲区值。有可能这样做吗?
另一种将结构元素拆分并重组为 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
我有一个结构:
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 上打印缓冲区值。有可能这样做吗?
另一种将结构元素拆分并重组为 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