繁体   English   中英

将字节转换为sbyte而不更改C#中的位

[英]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内?

该位在bsb之间根本没有变化。 此行为来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM