2015-09-06 16 views
1

我想在C#中显示三个字节(有符号)。如何在C#中显示签名的三个字节的十六进制输出?

代码(片段)我提出的是:

case 3: 
    HexadecimalValueRange = SignedValueChecked ? 
    string.Format("{0:X6}..{1:X6}", (Int32) minValue, (Int32) maxValue) 
    : string.Format("{0:X6}..{1:X6}", (UInt32)minValue, (UInt32)maxValue); 

但它显示的一实例负的值作为0xFFC00000其中我想看到0xC000000,所以用6“显著”位数(从而没有前导FF )。

+1

根据[标准数字格式字符串(https://msdn.microsoft.com/en-us /library/dwhawy9k%28v=vs.110%29.aspx#XFormatString)中,精度说明符*表示结果字符串中所需的**最小**数字数目*不是最大数字,也不会请钳制数字,如下例所示:'123456789.ToString(“X2”)//显示75BCD15'。尝试[如何强制数字在C#中的范围?](http://stackoverflow.com/questions/3176602/how-to-force-a-number-to-be-in-a-range-in相反)。 – dbc

+0

@dbc:我知道这是最小位数,但是钳位该值仍然会导致前导FF值。 –

回答

2

负数的领先位显著,所以你不能切断与String.Format关闭(没有说明符,让你忽略显著数字,宽度仅规定最小尺寸和左/右对齐)。

您可以将值转换为3个字节的uint打印他们你想要的方式:

string.Format("{0,-6:X}",(uint)(int.MaxValue & 0xFFFFFF)) 
相关问题