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

C#实现3个整数转RGB十六进制字符串时单字符Hex值处理错误如何解决

问题根因
  • 你的代码核心问题是单数字的十六进制值没有补前导0凑够2位,Convert.ToString(int value, 16) 对于0~15的输入只会返回长度为1的字符串,你在替换初始的000000时,短字符串只能覆盖对应位置的第一个字符,第二个字符还是残留的初始0,就会出现你遇到的12转成C而不是0C,最终结果错位的问题。
  • 额外说明:ReplaceAt不是C#字符串的内置方法,你的代码如果要在标准C#环境运行,还要依赖你自己实现的扩展方法,兼容性不好。
修复方案

有两种简洁的改法,不需要手动做字符串替换:

方案1:格式化字符串补前导0(最常用)

直接用格式说明符X2,表示将数字转为大写十六进制,固定占2位,不足自动补前导0:

public static string Rgb(int r, int g, int b)
{
    r = Math.Clamp(r, 0, 255);
    g = Math.Clamp(g, 0, 255);
    b = Math.Clamp(b, 0, 255);
    return $"{r:X2}{g:X2}{b:X2}";
}

这个写法不需要做任何字符串拼接替换,直接插值格式化就能得到正确结果,性能和可读性都比你原来的实现好。

方案2:手动补前导0

如果你确实需要保留手动转换的逻辑,可以在拿到Convert.ToString的结果后,用PadLeft补前导0到固定2位:

public static string Rgb(int r, int g, int b)
{
    r = Math.Clamp(r, 0, 255);
    g = Math.Clamp(g, 0, 255);
    b = Math.Clamp(b, 0, 255);

    string hexR = Convert.ToString(r, 16).PadLeft(2, '0');
    string hexG = Convert.ToString(g, 16).PadLeft(2, '0');
    string hexB = Convert.ToString(b, 16).PadLeft(2, '0');

    return (hexR + hexG + hexB).ToUpper();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:06:02