【问题标题】:Converting a decimal value into a hex value with the same visible representation将十进制值转换为具有相同可见表示的十六进制值
【发布时间】:2018-11-29 17:32:59
【问题描述】:

我正在开发一个仅以十六进制表示形式输出数字的微控制器。我有以十进制计算的数据,供人类阅读和解释。我的输出是三个十进制数字 45、27 和 91,当我输出这些数字时,我得到 0x2D、0x1B 和 0x5B。 45转0x45、27转0x27等等,我可以执行什么操作。

【问题讨论】:

  • "0x" 字符串放在前面...等等,你的意思是显示输出吗?您期望结果是什么数据类型?
  • 如何输出变量?通过串行接口、调试日志、显示器或其他方式?
  • " 我的输出是三个十进制数字 45、27、91" 所以当你得到 4A 时,它是如何工作的? 0x45和45不一样
  • @UKMonkey:老人们会知道这种格式为 BCD,即二进制编码的十进制。当您获得 0x4A 十六进制时,将其转换为 0x74 BCD。
  • @MSaltersThanks - 每天都能学到新东西,很高兴再次感到年轻! :)

标签: c++ hex decimal data-conversion


【解决方案1】:

虽然我认为将45转换为0x45不是一个好主意,但方法如下:

int dec = 45;
int hex = 0;
int i = 1;
while(dec/10 != 0){
    int digit = dec%10;
    hex += digit*i;
    i *=16;
}
cout << hex << endl;// if you convert "hex" to hexadecimal, it would be 0x45

【讨论】:

    【解决方案2】:

    如果我理解正确,你想要这样的东西:

    unsigned char convert(unsigned char in) {
        return ((in % 10) * 0x01) + ((in / 10) * 0x10);
    }
    
    int main()
    {
        unsigned char a = 45;
        printf ("0x%02X", convert(a)); // prints "0x45"
        return 0;
    }
    

    它将十进制值45 转换为0x45,相当于十进制69。 请注意,由于/ 的划分,微控制器上的转换函数并不是很快。

    它只能打印从 0 到 99 的十进制值,因为只有两个数字可以使用。

    【讨论】:

    • 我有点困惑...为什么所有这些巫毒教而不是std::cout &lt;&lt; "0x" &lt;&lt; 45;
    • @user463035818 如果我理解了这个问题,他需要通过串行接口发送值。这就是为什么 OP 要求将 45 转换为 69,您可以在串行流上看到 0x45。
    • 仍然没有完全理解,但听起来很合理
    • 嗨,谢谢你,这正是我想要的!对不起,如果我没有正确地表达它
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多