使用C ,将转换为char的问题始终具有3位数字
Using C++, Issue with converting int to char always having 3 digits
我正在尝试转换一个具有1-360
值的整数,并将其保存为值001-360
的字符。示例1 = 001
,43 = 043
,349 = 349
。(如果有比Char更好的方法(
我已经使用字符串或char []寻找了不同的方法,但似乎无法正确。
lotrackangle将是一个int编号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 解决方案:
#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(
看一下:
int main()
{
int number = 360;
char chars[4];
auto str = std::to_string(number);
str.insert(0, 3 - str.size(), '0');
std::memcpy(chars,str.data(),str.size());
return 0;
}
使用此方法,您可以保留原始字符串,也可以将其记忆到char []。
编辑:如果需要的话,将一个衬里添加到插入0。
这是不使用额外的字符串或流的替代方案。
#include <cstring>
#include <iostream>
char* fill_char_array(char *arr, int size, int num)
{
if ( size <= 0 )
return arr;
memset(arr, '0', size); // set all positions to character 0
arr[size-1] = 0; // null terminate
int index = size - 2;
while (num > 0 && index >= 0)
{
arr[index] = (num % 10) + '0'; // set the digit in the array
num /= 10;
--index;
}
return arr;
}
int main()
{
char trackAngleCHR[4];
std::cout << fill_char_array(trackAngleCHR, 4, 38) << "n";
std::cout << fill_char_array(trackAngleCHR, 4, 1) << "n";
std::cout << fill_char_array(trackAngleCHR, 4, 534) << "n";
}
输出:
038
001
534
相关文章:
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 输出错误,问题是找到总和5000位数字cpp
- 顺时针迭代旋转 3 位数字
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用 cin 时接受小数点后的 2 位数字
- 您可以使用 setfill() 来设置 fill 2 位数字吗?
- 斐波那契数列部分和的最后一位数字
- 我需要找到 N 位数字的总和
- 在不添加进位的情况下添加数字的C++程序
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 如何在C ++中替换整数的前两位数字?
- 将最多 50 位数字的 2 个数字相乘
- C++ 中 11 位数字的数字的乘积
- 如何旋转给定数字的位
- 两个数字按位连接
- 作为数字的位的c++列表
- 反转数字的位
- C++:数字与位