如果我有一个表示从文件读取的数字的字节数组,那么如何将字节数组转换为Int16 / short?
byte[] bytes = new byte[]{45,49,54,50 } //Byte array representing "-162" from text file
short value = 0; //How to convert to -162 as a short here?
尝试使用BitConverter.ToInt16(字节,0),但值不正确。
编辑:寻找不使用字符串转换的解决方案。
答案 0 :(得分:2)
此功能执行一些您可以排除的验证。如果您知道输入数组将始终包含至少一个元素并且该值将是有效的Int16,则可以简化它。
const byte Negative = (byte)'-';
const byte Zero = (byte)'0';
static Int16 BytesToInt16(byte[] bytes)
{
if (null == bytes || bytes.Length == 0)
return 0;
int result = 0;
bool isNegative = bytes[0] == Negative;
int index = isNegative ? 1 : 0;
for (; index < bytes.Length; index++)
{
result = 10 * result + (bytes[index] - Zero);
}
if (isNegative)
result *= -1;
if (result < Int16.MinValue)
return Int16.MinValue;
if (result > Int16.MaxValue)
return Int16.MaxValue;
return (Int16)result;
}
答案 1 :(得分:0)
就像willaien所说,你想先把你的字节转换为字符串。
byte[] bytes = new byte[]{ 45,49,54,50 };
string numberString = Encoding.UTF8.GetString(bytes);
short value = Int16.Parse(numberString);
如果您不确定是否可以解析字符串,建议您使用Int16.TryParse
:
byte[] bytes = new byte[]{ 45,49,54,50 };
string numberString = Encoding.UTF8.GetString(bytes);
short value;
if (!Int16.TryParse(numberString, out value))
{
// Parsing failed
}
else
{
// Parsing worked, `value` now contains your value.
}