C++ 如何将str编号从dec转换为十六进制
您好,我有这样的变量:C++ 如何将str编号从dec转换为十六进制,c++,type-conversion,C++,Type Conversion,您好,我有这样的变量: uint8\u t*str value=“100663296” 我只是不想转换成str的十六进制解释。 我不需要对这个变量进行任何数学运算 uint8\u t*输出值=“6000000” 如何正确地做?我不能使用convert to int和sprintf,因为我的MCU上没有用于此的内存。更新:错过了有关MCU和内存限制的部分:)此答案没有用处 您可以尝试执行以下操作: 将数字的字符串表示形式转换为整数值(可以使用intatoi(constchar*str);函数 获
uint8\u t*str value=“100663296”代码>
我只是不想转换成str的十六进制解释。
我不需要对这个变量进行任何数学运算
uint8\u t*输出值=“6000000”代码>
如何正确地做?我不能使用convert to int和sprintf,因为我的MCU上没有用于此的内存。更新:错过了有关MCU和内存限制的部分:)此答案没有用处
您可以尝试执行以下操作:
- 将数字的字符串表示形式转换为整数值(可以使用
intatoi(constchar*str);
函数
- 获得整数后,您可以将其打印为十六进制,例如使用
sprintf
函数,将%x
作为格式参数,将整数作为值参数
以下是一个工作示例:
#包括
使用名称空间std;
int main(){
int n;
字符十六进制值[50];
n=atoi(“100663296”);
sprintf(十六进制值,“%x”,n);
cout可以使用
(如果可用):
#include <charconv>
#include <cstdio>
#include <cstdlib>
int main() {
auto const* str = "2147483647";
errno = 0;
char* end;
long i = std::strtol(str, &end, 10);
if (end == str || errno == ERANGE)
return 1;
char out[20];
auto const [p, err] = std::to_chars(out, out + sizeof out, i, 16);
if (err != std::errc{})
return 2;
*p = 0; // null terminate
std::puts(out);
}
#包括
#包括
#包括
int main(){
自动常量*str=“2147483647”;
errno=0;
字符*结束;
长i=std::strtol(str和end,10);
if(end==str | | errno==ERANGE)
返回1;
字符输出[20];
自动常数[p,err]=std::to_chars(out,out+sizeof out,i,16);
if(err!=std::errc{})
返回2;
*p=0;//null终止
标准::输出(输出);
}
这正是问题作者排除在外的原因,因为“没有记忆”——不管她/他是什么意思(可能对int/long/long太大了?).sprintf是默认值,在STM32编译器上禁用,当我向编译器添加-u\u printf\u float标志时,程序使用60%memory@user22090909如果我没有记错的话,那不是完全正确的。printf
应该是可用的,但是默认情况下不支持浮点数(%f%e%g
等)。您需要该编译器标志来启用浮点转换。好的,我将检查,谢谢。请显示您将手动执行什么操作?以十进制表示方式连续除以16,生成一个接一个的数字。您可能正在尝试类似的操作,重新使用已计算的十进制字符串的字符。这应该可以作为目标se大于源代码基数。别忘了事后还原生成的字符串。如果printf
本身的代码太大:许多微控制器的编译器提供了排除浮点转换的方法,而浮点转换是最复杂的转换。也许你应该检查一下。你知道将十进制数转换为十六进制所涉及的数学吗如果你不需要,你首先需要学习数学。如果你这样做,那么就在C++中逐字地执行数学运算。你有足够的内存来存储代码< iToA()吗?
?无论是包含其他人的代码还是编写自己的代码,您都至少需要足够的压缩版本。@TimRandall考虑到对的注释,我认为问题相当于printf
函数–因为意外启用了浮点转换。