我一直在研究一个需要将int8_t变量转换为字符串的项目。我对此做了一些阅读并得出结论,使用Strint(int8_t)是一个选项。
这是我的代码:
int8_t matt = 0;
matt += 1;
char string[3]=String(matt);
tft.textWrite(string);// this is used to display text on an lcd display (arduino)
由于某些原因,我使用的方法不起作用所以我研究了一点,发现String(matt)实际上是一个String对象。我真的不知道这是否属实。为了tft.textWrite();工作它应该看起来像这样。
以下是代码:
char string[15]= "Hello, World! ";
tft.textWrite(string);
我也尝试过使用它:
char string[3];
sprintf(string, "%ld", matt);
然而这不起作用。
有人可以帮忙吗?
由于
答案 0 :(得分:0)
它应该可以正常工作。
sprintf(string, "%ld", matt);
%ld用于long int。你使用的int8_t的范围是-128到+128,最好使用%d。
答案 1 :(得分:0)
此代码几乎是正确的
char string[3];
sprintf(string, "%ld", matt);
第一
"%ld"
期望long int
作为一种类型,您需要找到一个可以打印8位int的类型。我认为它是"%hh"。
你的第二个
char string[3];
太短了!如果亚光是100然后你使用3个字符但你还需要空间来结束零(和符号)。所以它至少应该是
char string[5];
第三个代码
sprintf(string, "%ld", matt);
是不安全的,因为它可以像在原始代码中那样写入字符串末尾之外,使用
snprintf(string, sizeof(string), "%ld", matt);
答案 2 :(得分:0)
首先,您必须记住C中没有String类型,只有固定大小的char数组(类型:char *或char [])。我们仍称它们为字符串,但请牢记这一点。
你对sprintf的尝试对我来说很好看。你觉得你的环境包括完整的C标准库吗?如果没有,您将必须编写自己的格式函数。如果是,你是否包括string.h?
无论如何,尝试使用snprintf()来精确定位目标的大小,它更安全。
编辑:这篇文章适用于优秀的'C风格,我没有看到它是偏离主题
答案 3 :(得分:-1)
以下代码应该有效:
// Example program
#include <iostream>
#include <string>
int main()
{
int8_t matt = 0;
matt += 1;
char string[1];
sprintf(string, "%ld", matt);
std::cout << string << std::endl;
return 0;
}
打印“1”。