У меня есть функция, которая принимает два строковых значения в шестнадцатеричном формате, и мне нужно сделать их реализацией булевых функций AND, OR и XOR, но моя реализация не доставляет ожидаемые значения:
string A = "00000018631340800001";
string B = "FFFFFFFFFFFFFFE00000";
Ожидаемый ответ A & 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);
}
Я знаю, что я также могу улучшитьмного кода, но я хотел бы знать, почему он не работает.