【问题标题】:Store hex printf output to variable将十六进制 printf 输出存储到变量
【发布时间】:2016-10-03 03:55:47
【问题描述】:

我必须将浮点数四舍五入为小数。四舍五入后,我应该将此数字转换为十六进制。我想我已经用round() 完成了结束部分。

有没有办法在 C 中将十进制转换为十六进制,并将其存储到数组的一部分中? 我正在思考printf() 如何将十进制转换为十六进制的概念。

我的想法是这样的:

float k = 10.123;
int a;
unsigned char var_store[1];
unsigned char array_t[3];
array_t[0] = 0x01;
array_t[1] = 0x04; 
a = round(k);
var_store[0] = sprintf("%x",a);
array_t[2] = var_store[0];

但我有一个

警告传递 'sprintf' 的参数 2 使指针来自整数 没有演员表

我不确定这是否是这样做的方法。但我认为这是相对直截了当的。谢谢

【问题讨论】:

  • 是的,有办法做到这一点,你可以用 sprintf 做到这一点。但是您使用 sprintf 不正确。您是否阅读了 sprintf 的文档?
  • 代码中的最后两行暗示您需要了解该语言的基础知识(或者至少想想您想要做什么)。当然没有冒犯。

标签: c hex decimal rounding


【解决方案1】:

人们往往对“十六进制”一词感到非常困惑。它应该表示“数字作为人类可读的 ascii 字符串,数字为 0-F”,但由于原始二进制数据通常以十六进制表示,人们误用它来表示二进制数据本身。 当然,您可以编写一个函数,将表示为字符串的十进制数转换为表示为另一个字符串的十六进制数,但它很繁琐,而且除了作为学习练习外,没有任何意义。 sprintf 为您将 C 变量转换为人类可读的字符串。要获得小数,请传递“%d”,要获得十六进制,请传递“%x”。您还需要像这样传递一个目标缓冲区。

char destination[256];
int a = 123; 
sprintf(destination, "number is decimal %d hex %x", a, a);

【讨论】:

    【解决方案2】:

    我没有记起任何库函数。

    但传统的数学方法如下。我希望你可以创建一个用户定义的函数。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        long int decimalNumber = 2567888;
        char hexadecimalNumber[100];
        int temp;
        int i =1;
    
        while(decimalNumber!=0)
        {
             temp = decimalNumber % 16;
    
          //To convert integer into character
          if( temp < 10)
               temp =temp + 48;
          else
             temp = temp + 55;
    
          hexadecimalNumber[i++]= temp;
          decimalNumber = decimalNumber / 16;
        }
    
        for(int j = i -1 ;j> 0;j--)
          cout<<hexadecimalNumber[j];
    }
    

    【讨论】:

    • #include &lt;iostream&gt; using namespace std; ... cout&lt;&lt;hexadecimalNumber[j]; 不会编译为 C,因为这篇文章被标记了 也许您正在考虑另一种语言?
    猜你喜欢
    • 2013-11-11
    • 2012-10-07
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多