You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SetConsoleTextAttribute函数参数值192分解为前景色和背景色

SetConsoleTextAttribute参数分解思路

1 先明确参数位分配规则

SetConsoleTextAttribute的第二个参数是16位的WORD类型,颜色控制使用低8位,位分配固定为:

  • 位0~位3(低4位):控制前景色(文本颜色)
  • 位4~位7(高4位):控制背景色
    对应系统定义的颜色宏如下:
// 前景色相关(低4位)
#define FOREGROUND_BLUE      0x0001 // 前景蓝色分量
#define FOREGROUND_GREEN     0x0002 // 前景绿色分量
#define FOREGROUND_RED       0x0004 // 前景红色分量
#define FOREGROUND_INTENSITY 0x0008 // 前景高亮增强

// 背景色相关(高4位)
#define BACKGROUND_BLUE      0x0010 // 背景蓝色分量
#define BACKGROUND_GREEN     0x0020 // 背景绿色分量
#define BACKGROUND_RED       0x0040 // 背景红色分量
#define BACKGROUND_INTENSITY 0x0080 // 背景高亮增强

2 转换数值进制拆分对应位

你要分解的十进制数值192,转十六进制为0xC0,转8位二进制为1100 0000,拆分高低4位:

  • 低4位:0000 → 前景色总数值为0
  • 高4位:1100 → 背景色总数值为0xC(十进制12)

3 匹配对应颜色属性

  • 前景色低4位为0,所有前景色位都未激活,对应黑色文本
  • 背景色高4位1100拆分后为0x80 | 0x40,对应两个宏:
    • 0x40 = BACKGROUND_RED(背景红色分量激活)
    • 0x80 = BACKGROUND_INTENSITY(背景高亮激活)
      组合后对应亮红色背景

通用验证方法

可以写代码直接打印参数对应的激活位,直观确认颜色组合:

#include <windows.h>
#include <stdio.h>
int main(){
    WORD attr = 192;
    printf("===== 前景色激活位 =====\n");
    if(attr & FOREGROUND_BLUE) printf("- FOREGROUND_BLUE\n");
    if(attr & FOREGROUND_GREEN) printf("- FOREGROUND_GREEN\n");
    if(attr & FOREGROUND_RED) printf("- FOREGROUND_RED\n");
    if(attr & FOREGROUND_INTENSITY) printf("- FOREGROUND_INTENSITY\n");

    printf("\n===== 背景色激活位 =====\n");
    if(attr & BACKGROUND_BLUE) printf("- BACKGROUND_BLUE\n");
    if(attr & BACKGROUND_GREEN) printf("- BACKGROUND_GREEN\n");
    if(attr & BACKGROUND_RED) printf("- BACKGROUND_RED\n");
    if(attr & BACKGROUND_INTENSITY) printf("- BACKGROUND_INTENSITY\n");
    return 0;
}

内容的提问来源于stack exchange,提问作者JJJohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:45:03