我想将一个字节转换为sbyte,而不更改任何位。
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?
答案 0 :(得分:3)
该位在String yourString = "com.google.android.syncadapters.contacts";
String[] sArr = yourString.split("\\.");
String output = sArr[sArr.length-1];
和b
之间根本没有变化。此行为来自Convert.ToString()
。只有sb
的重载才会占用Convert.ToString()
和基数。最接近的匹配是Convert.ToString Method (Int16, Int32)
。因此sbyte
符号扩展为16位。
答案 1 :(得分:0)
使用ToString
通常会产生不太令人惊讶的结果,并且不会发生意外转换(例如sbyte
- > short
,如shf301' s所述{{3 }})。
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))))