[英]Convert volatile int to int8_t for output
我正在使用现有代码,并试图不保留在触摸屏上输出文本的代码。 文本定义为int8_t
,不允许我将文本与整数组合。 我在带有增强包K350QVG的TI启动板MSP432上执行此操作。 我已经在该网站和Google上进行了多次搜索,但无法获得他人建议的代码,请提供帮助和解释。
我正在使用的一些代码:
Graphics_drawStringCentered(&g_sContext, "Draw Rectangles",
AUTO_STRING_LENGTH, 159, 15, TRANSPARENT_TEXT);
我想将“绘制矩形”更改为“值等于:” +值
void Graphics_drawStringCentered(const Graphics_Context *context,
int8_t *string, int32_t length, int32_t x, int32_t y,
bool opaque)
{
Graphics_drawString(context, string, length,
(x) - (Graphics_getStringWidth(context, string, length) / 2),
(y) - (context->font->baseline / 2), opaque);
}
当我尝试添加它时,出现此错误
#
169-D类型为char *
参数与类型为int8_t *
“ *的参数不兼容 我尝试了几种将int
转换为int8_t
方法,但没有找到任何有效的方法。 能否请您提出建议尝试一下,我将发布结果。
听起来您正在尝试使用“ +”运算符连接字符串。 您不能使用“ +”运算符来连接C中的字符串。相反,您必须自己为新字符串分配内存,然后可以使用string.h中的标准库函数strncat()来连接字符串。
第二个问题是对C字符串使用int8_t *而不是char *。 那不是C语言中字符串的标准类型,我也不知道为什么现有代码使用它。 但是,如果仅使用ASCII字符,则在调用Graphics_drawStringCentered()时进行强制转换应该可以工作。
#include <string.h>
int8_t* Value = (int8_t*)"123"; /* string using a strange type */
char theString[256]; /* create a 256-byte buffer to hold the string */
strncpy(theString, "Value: ", 256); /* initialize the buffer with the first string */
strncat(theString, (char*)Value, 256); /* append the second string */
theString[255] = '\0'; /* ensure the string is NULL-terminated */
Graphics_drawStringCentered(&g_sContext, (int8_t*)theString,
AUTO_STRING_LENGTH, 159, 15, TRANSPARENT_TEXT);
Graphics_drawString()
返回后不需要持久保留字符串缓冲区。 strncpy()
和strncat()
构建字符串。 如果您的逻辑允许您一次构建整个字符串,则可以使用snprintf(theString, 256, "Value: %s", (char*)Value);
作为一个更简单的选择。 (与strncpy()
和strncat()
, snprintf()
始终以NULL终止字符串。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.