c++ - C++ 中的十六进制加法

标签 c++

我想添加一个十六进制数组。我已经这样做了,但是我在加法函数中遇到了问题;它不是添加而是显示一些图片。

void addition(char hexDecOne[10], char hexDecTwo[10], char (&hexDecSum)[10]) {
    for (int i = 0; i < 10; i++) {
        // convert to decimal and add both array values
        hexDecSum[i] = convert(hexDecOne[i]) + convert(hexDecTwo[i]);
        // add values and if they are greater than F add 1 to next value
        hexDecSum[i + 1] += hexDecSum[i] / 16;
        hexDecSum[i] %= 16;
    }
}

int convert(char item) {
    switch (item) {
        case 'A':
            return 10;
            break;
        case 'B':
            return 11;
            break;
        case 'C':
            return 12;
            break;
        case 'D':
            return 13;
            break;
        case 'E':
            return 14;
            break;
        case 'F':
            return 15;
            break;
    }
}

我们将不胜感激。

最佳答案

存储在 hexDecOnehexDecTwo 中的“数字”不是十六进制数字,它们是等于 '0' 的字符,'1',等等直到 'F'。您的 convert 函数还需要将字符 '0' 转换为 '9',然后您需要以其他方式转换结果周围使您的数字显示为字符。

顺便说一句,当两个 hexDec 的最高有效数字相加意味着非空进位时,您的代码会造成缓冲区溢出。

关于c++ - C++ 中的十六进制加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519576/

相关文章:

c++ - 针对 "initialize()"方法而不是构造函数的参数

c++ - 传递和转换方法指针

c++ - UnitTest++ 问题 : Trying to use a Predicate that has state

c++ - 使基类指针表现得像 C++ 中的派生类

c++ - Boost::Array 中的垃圾值与 Boost::Asio 一起使用

c++ - Firefox Build 上的 Printf 到控制台

c++ - 如何使用c++在MAC OS中捕获鼠标事件

c++ - 在 C/C++ 中,左移或右移零实际上会生成一条指令吗?

c++ - 最烦人的解析

c++ - 使用 Win7/64 分析在 XP/32 机器上生成的 Windows 崩溃转储?