将volatile int转换为int8_t以进行输出

时间:2016-01-03 23:06:12

标签: c integer

我正在使用现有代码,并且我试图不要在触摸屏显示器上输出文本的代码。文本定义为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);
}

当我尝试添加它时,我收到此错误

  • #类型为“char *”的169-D参数与“int8_t *”*
  • 类型的参数不兼容

我尝试了几种将int转换为int8_t的方法,但没有发现任何有用的方法。你能帮忙建议尝试一下,我会发布我的结果。

1 个答案:

答案 0 :(得分:0)

听起来您正在尝试使用“+”运算符连接字符串。你不能使用“+”运算符来连接C中的字符串。相反,你必须自己为新字符串分配内存,然后你可以使用string.h中的标准库函数strncat()来连接字符串。 / p>

第二个问题是对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 - 终止字符串。)