C 十六进制加法输出错误

问题描述 投票:0回答:1

我有这个函数,通过访问每个对象中存储的数字,将两个十六进制数字一次一个字节地相加。然而,这有时会导致不正确的输出,我认为这是由于进位值错误造成的。

IntStatus_t intN_add(IntN_t opa, IntN_t opb, IntN_t* result)
{
    uint8_t i = NBYTES;
    uint8_t carry = 0;
    uint16_t sum = 0;

    do {
        i--;
        sum = opa.data[i] + opb.data[i] + carry;
        if (sum > 255) {
            result->data[i] = sum;
            carry = (sum - 255);        
        } else {
            result->data[i] = sum;
            carry = 0;
        }
        
    } while (i > 0);

例如,

Provide an intN number in hex encoded form: 00 80 ff
Provide an intN number in hex encoded form: 01 80 01


The sum is:0x030100

返回 0x030100 而不是 0x20100。

c hex
1个回答
0
投票

这是错误的:

carry = (sum - 255);

如果将 200 和 200 加起来,您将得到 400,这应该是 400 - 256 = 144,进位为 1。但是,您的进位计算会给您一个数百个数字,这显然不是您想要的想要。

© www.soinside.com 2019 - 2024. All rights reserved.