Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将str编号从dec转换为十六进制_C++_Type Conversion - Fatal编程技术网

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
函数–因为意外启用了浮点转换。