比较 google 单元测试框架中的字节

comparing bytes in google unit test framework

我有一个下面的测试用例,我想在 google 测试中比较字节。在 Unity 单元测试框架工作中,我们有

TEST_ASSERT_BYTES_EQUAL(0xaa, output[4]);

google 测试中是否有类似的 ASSERT。我在 google 测试和测试用例失败中有以下代码。

TEST(sprintf, NoBufferOverRunsForNoFormatOperations) {
    char output[5];
    memset(output, 0xaa, sizeof output);
    ASSERT_EQ(3, sprintf_s(output, "hey"));
    ASSERT_STREQ("hey", output);
    ASSERT_THAT(0xaa, output[4]);
}

失败日志

[ RUN      ] sprintf.NoBufferOverRunsForNoFormatOperations
 Value of: 0xaa
Expected: is equal to -86
  Actual: 170 (of type int)
[  FAILED  ] sprintf.NoBufferOverRunsForNoFormatOperations (0 ms)

欢迎提供任何线索和帮助。

问题是您正在比较 0xaa,一个值为十进制 170 的 int 类型的文字,与 output[4] 的值本身是 charchar 是 C 和 C++ 中的 signed 类型。您将 0xaa 或二进制 10101010 写入了相关字节。因为它被解释为带符号的数字,所以前导 1 被视为二进制补码中的符号位(我认为这是直到 C++20 之前的未定义行为),它的值为 -86 = 170 - 256.