我有一个下面的测试用例,我想比较一下google测试中的字节。在统一单元测试框架中,我们有
TEST_ASSERT_BYTES_EQUAL(0xaa, output[4]);
类似的断言在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)
任何线索和帮助都是欢迎的。
发布于 2022-05-05 21:35:57
问题是,您正在比较0xaa
( int
类型的文字,值为十进制170 )和output[4]
本身的char
类型的值。char
是C和C++中的符号类型。您将0xaa
或二进制10101010
写入所讨论的字节中。因为它被解释为一个有符号的数字,所以前导1
被认为是二的补语中的符号位(直到我认为这是一个未定义的行为),它给它的值为-86 =170-256。
https://stackoverflow.com/questions/72136480
复制