[英]Convert byte to sbyte without changing bits in C#
我想将一个字节转换为一个字节,而不改变任何位。
byte b = 0x84;
sbyte sb = unchecked((sbyte)b);
Console.WriteLine("0x" + Convert.ToString(b, 16));
Console.WriteLine("0x" + Convert.ToString(sb, 16));
结果将是:
0x84
0xff84
我理解结果意味着什么以及它为什么会发生。 但是,我似乎无法找出我能做些什么来避免这种行为。 如何复制字节的实际二进制值并将其置于sbyte内?
该位在b
和sb
之间根本没有变化。 此行为来自Convert.ToString()
。 只是没有Convert.ToString()
的重载,它需要一个sbyte
和一个base。 最接近的匹配是Convert.ToString Method (Int16, Int32)
。 所以sb
被标记扩展到16位。
使用ToString
通常会产生不太令人惊讶的结果,并且不会出现意外的转换(如sbyte
- > shf301的答案中描述的short
转换)。
byte b = 0x84;
sbyte sb = unchecked((sbyte)b);
Console.WriteLine("0x" + b.ToString("x"));
Console.WriteLine("0x" + sb.ToString("x"));
或者直接使用格式:
String.Format("0x{0:x}",((unchecked ((sbyte)0x84))))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.