【发布时间】:2021-02-20 20:31:23
【问题描述】:
我正在学习 C++ 中的简单 XOR 加密算法。
下一个代码可以正常工作:
void test(int8_t* data, const int data_length) {
const uint8_t key = 123;
for (int index = 0; index < data_length; index++)
data[index] = data[index] ^ key;
}
给我的data是有符号的,因此有一个int8_t类型。
问题是编译器显示下一个警告:
“带符号整数操作数与二进制位运算符的使用”
在执行 XOR 操作时,我可以通过使用 uint8_t 强制转换 data 来发出警告,但我不知道其中的含义。我做了一些测试,似乎没有问题,但我很困惑,因为数据可以包含有符号值,所以我不确定通过转换它是否会弄乱数据。
即使数据可以包含负值,转换为 uint8_t 是否正确?还是我应该忽略警告?
【问题讨论】:
-
只是出于好奇-您能告诉我们您使用的是哪个编译器吗?我尝试了几个(MSVC 和 clang-cl),但它们不会产生这样的警告。
-
@AdrianMole 这完全取决于您的警告级别;如果您将编译器配置为这样做,GCC、clang 和 MSVC 将提供此类警告。
-
我正在使用来自 IntelliJ 的 CLion 使用 clang
-
@FabianKeßler 我在 MSVC(VS-2019)中有 /Wall(启用所有警告)并且没有给出警告:在编译和静态分析中都没有。但是,我可以看到应该有一个警告。
标签: c++ encryption compiler-warnings xor