☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

字节的类型应为 std::byte 或 unsigned char

6.7.3 ID_plainBinaryChar
目录 › next › previous

字节等二进制概念不应受对齐方式或符号位的干扰,字节的类型应为 std::byte 或 unsigned char。

std::byte 是 C++17 的标准字节类型,对字节相关的运算和操作提供了更安全的限定。在 C 代码或不便于遵循新标准的 C++ 代码中,应将字节类型声明为 unsigned char。

示例:

typedef char byte;       // Non-compliant
byte buf[100];
FILE* fp = fopen("foo", "rb");
fread(buf, 1, 100, fp);
if (buf[0] == 0xff) {    // May be always false
    ....
}
if (buf[1] << 1) {       // May cause undefined behavior
    ....
}

char 类型的符号由实现定义,有符号的 char 变量在数值计算、位运算等方面很容易产生意料之外的结果。

应改为:

typedef unsigned char byte;   // Compliant

这样做也可有效区分二进制数据与字符串,提高可读性。

相关

ID_plainNumericChar ID_bitwiseOperOnSigned

依据

ISO/IEC 9899:1999 6.2.5(3 15)-implementation ISO/IEC 9899:2011 6.2.5(3 15)-implementation ISO/IEC 14882:2003 3.9.1(1)-implementation ISO/IEC 14882:2011 3.9.1(1)-implementation ISO/IEC 14882:2017 21.2.1 ISO/IEC 14882:2017 21.2.5
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.