【问题标题】:Convert from uint8_t * to char * in C在 C 中从 uint8_t * 转换为 char *
【发布时间】:2017-08-15 03:29:27
【问题描述】:

我正在使用 Atmel Studio 用 C 语言进行编程(对于那些不熟悉它的人,它用于对 arduino 等微控制器进行编程。您不能简单地打印,您必须将数据串行发送到终端等应用程序。)

到目前为止:

uint8_t * stackHolder;
char buffer[128];
stackHolder = &buffer[127];

假设buffer[127] 的地址恰好是0x207。我可以看到stackHolder 的值是0x207 使用调试器。我有一个函数,它接受 char * 并打印它。所以我的问题是如何将uint8_t * stackHolder 转换为char * 以便将其传递给我的打印函数?

【问题讨论】:

  • C 不支持方法。确定你不使用 C++?还有为什么要转换指针?
  • 类型之间的转换是强制转换的目的。
  • 也许您需要将那些有符号和无符号的char 类型转换为int 以获得完整的范围。
  • 缓冲区中有什么? ASCII 字符?如果是这样,请消除 uint8_t 指针,只为 stackHolder 使用 char 指针。
  • 澄清一下,我的任务是编写一个移动堆栈指针位置的程序(我相信用于上下文切换)。我的微控制器中的堆栈指针由 2 个 uint8_t 寄存器组成。我只是想:a:获取它指向的地址并打印它,b:打印实际存储在该地址的内容。每当我施放它时,它不会打印任何东西,所以我认为它不能正常工作。我假设我的缓冲区充满了 0,因为我认为如果你不给出值,这就是 C 初始化它们的方式

标签: c casting char type-conversion uint8t


【解决方案1】:

如何将uint8_t * stackHolder 转换为char *

casting:

print((char*) stackHolder);

【讨论】:

    【解决方案2】:

    我有一个采用 char * 的方法

    建议将强制转换最小化到一个位置以完成目标并保留函数签名类型检查。使用强制转换创建包装函数。

    // OP's original function
    extern void skyleguy_Print(char *);
    
    void skyleguy_Print_u8(uint8_t *s) {
      skyleguy_Print((char *) s);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2012-04-29
      • 2011-10-23
      • 2015-11-19
      • 2019-10-14
      • 2021-07-11
      相关资源
      最近更新 更多