我使用BitConverter.ToString(bytes)
将字符串转换为十六进制字符串,我将其进一步转换为整数或浮点数。
但输入流由0组成,表示字节值为0.所以假设我有一个整数,由位置x开始的2字节输入表示,第一个字节由EE
组成,而第二个字节是00
。现在当我使用BitConverter.ToString(bytes, x, 2).Replace ("-","")
时,我得到的输出为EE00
,其整数值为60928
,但在这种情况下,输出应为238
,只转换第一个字节{{1}整数。
但在其他一些情况下,2个字节可能是EE
,其整数值将为EE01
,在这种情况下这是正确的。
任何建议如何解决我的问题?
由于有些人说这个问题很混乱我会重述我的问题我有十六进制字符串作为输入。 <十六进制字符串
1)前12个字节代表字符串。 2)接下来的11个字节也代表一些其他字符串。 3)接下来的1个字节表示整数。 4)接下来的3个字节表示整数。 5)接下来的4个字节表示整数。 6)接下来的4个字节代表浮点数。 7)接下来的7个字节代表字符串。 8)接下来的5个字节表示整数。
所以对于第四种情况,如果字节是ee 00 00那么我应该忽略0并将ee转换为整数。但如果它是ee 00 ee那么我应该将ee00ee转换为整数。每次我都会遵循上面提到的相同模式。
答案 0 :(得分:0)
此方法将十六进制字符串转换为字节数组。
public static byte[] ConvertHexString(string hex)
{
Contract.Requried(!string.IsNullOrEmpty(hex));
// get length
var len = hex.Length;
if (len % 2 == 1)
{
throw new ArgumentException("hexValue: " + hex);
}
var lenHalf = len / 2;
// create a byte array
var bs = new byte[lenHalf];
try
{
// convert the hex string to bytes
for (var i = 0; i != lenHalf; i++)
{
bs[i] = (byte)int.Parse(hex.Substring(i * 2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
}
catch (Exception ex)
{
throw new ParseException(ex.Message, ex);
}
// return the byte array
return bs;
}
从另一方面来说:
public static string ConvertByteToHexString(byte num)
{
var text = BitConverter.ToString(new[] { num });
if (text.Length == 1)
{
text = "0" + text;
}
return text;
}
答案 1 :(得分:0)
我的问题已经解决了。我犯了Endianness的错误。我收到的数据为EE 00,我应该在转换为整数之前将其作为00 EE。感谢所有给我解决问题的人,并且抱歉错过了这个重要的事实。