首页 > 解决方案 > 使用 C++,将 int 转换为 char 总是有 3 位数的问题

问题描述

我正在尝试使用 value 转换整数1-360并将其保存为 value 的 char 001-360。例子1 = 001,,,。43 = 043_ 349 = 349(如果有比 char 更好的方法,我会全力以赴)

我已经使用 string 或 char[] 寻找不同的天气方法,但似乎无法正确处理。

LOtrackAngle 将是一个整数 1-360

case 'q':
case 'Q':
{
    char trackAngleCHR[4];
    sprintf(trackAngleCHR, "%d", LOtrackAngle);
    ss << " 16"
       << "1" << trackAngleCHR << ""
       << "1"
       << "9";
    LOtrackAngle += 1;
    if (LOtrackAngle > 360)
    {
        LOtrackAngle = LOtrackAngle - 360;
    }
    break;
}

是:

LOtrackAngle=248, Output is 16124819.
LOtrackAngle=34, Output is 1613419.
LOtrackAngle=7, Output is 161719.

应该:

LOtrackAngle=7, Output is 16100719.

我需要这些总是 8 个字符长。

标签: c++chartype-conversionint

解决方案


由于您已经使用流,我建议使用完全 C++ 解决方案:

#include <iomanip> //for std::setw

case 'q':
case 'Q':
{
    ss << " 16" << "1" 
       << std::setw(3) << std::setfill('0') << LOtrackAngle
       << "1" << "9";

    LOtrackAngle += 1;
    if (LOtrackAngle > 360)
    {
        LOtrackAngle = LOtrackAngle - 360;
    }
    break;
}

它不仅更简洁,更易于阅读,而且还可以防止缓冲区溢出(如果您的数字4由于某种原因不适合长度的缓冲区,您将不会得到一些奇怪的 UB)


推荐阅读