1

BitConverter.ToString(bytes)用于将字符串转换为十六进制字符串,然后将其进一步转换为整数或浮点数。

但是输入流由 0 组成,表明字节值为 0。所以假设我有一个整数,它由从位置 x 开始的 2 个字节的输入表示,第一个由EEwhile 2nd byte is组成00。现在,当我使用时,BitConverter.ToString(bytes, x, 2).Replace ("-","")我得到的输出是EE00其整数值,60928但在这种情况下,输出应该是238仅将第一个字节转换EE为整数。

但在其他一些情况下,这 2 个字节可能是EE01其整数值60929,在这种情况下是正确的。

有什么建议可以解决我的问题吗?

由于有些人说这个问题令人困惑,我将重申我的问题,我有很长的十六进制字符串作为输入。在十六进制字符串中

1) 前 12 个字节代表字符串。2)接下来的 11 个字节也代表一些其他的字符串。3) 接下来的 1 个字节代表整数。4) 接下来的 3 个字节代表整数。5) 接下来的 4 个字节代表整数。6) 接下来的 4 个字节代表浮点数。7) 接下来的 7 个字节代表字符串。8) 接下来的 5 个字节代表整数。

因此,对于第 4 种情况,如果字节是 ee 00 00,那么我应该忽略 0 并将 ee 转换为整数。但如果它 ee 00 ee 那么我应该将 ee00ee 转换为整数。同样,每次我都会遵循与上述相同的模式。

4

2 回答 2

0

我的问题已经解决了。我犯了 Endianness 的错误。我收到的数据是 EE 00,在转换为整数之前我应该​​把它当作 00 EE。感谢所有为我的问题提供解决方案的人,并且很抱歉错过了这个重要的问题。

于 2013-08-21T07:09:41.483 回答
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;
}
于 2013-08-19T11:36:21.190 回答