在C ++中使用十六进制字符串的按位函数AND,OR和XOR

时间:2018-05-10 18:11:01

标签: c++ hex boolean-operations

我有一个函数接受十六进制的两个字符串值,我需要使它们实现布尔函数AND,OR和XOR,但是我的实现没有提供预期的值:

string A = "00000018631340800001";
string B = "FFFFFFFFFFFFFFE00000";

A& amp;的预期答案B =“00000018631340800000”,但我的功能总是给出“00000000000000000000”。

这是我的代码:

string funcion_and(string valor1, string valor2)
{
    int val_int[20 + 1] = {0};
    char valC[20 + 1] = {0};
    unsigned char valA[20 + 1] = {0};
    unsigned char valB[20 + 1] = {0};

    sscanf(valor1.c_str(), "%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX",
    &valA[0], &valA[1], &valA[2], &valA[3], &valA[4], &valA[5], &valA[6], &valA[7], &valA[8], &valA[9]);

    sscanf(valor2.c_str(), "%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX",
    &valB[0], &valB[1], &valB[2], &valB[3], &valB[4], &valB[5], &valB[6], &valB[7], &valB[8], &valB[9]);

    for(int i = 0; i < 10; i++)
    {
        val_int[i] = valA[i] & valB[i];
    }

    sprintf(valC, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", val_int[0], val_int[1], val_int[2], val_int[3], val_int[4], val_int[5], val_int[6], val_int[7], val_int[8], val_int[9]);

    return string(valC);
}

我知道我也可以改进代码,但我想知道为什么它不起作用。

0 个答案:

没有答案