c# bitconverter.ToString convert to hexadecimal string

女生的网名这么多〃 提交于 2019-12-11 10:15:17

问题


I am using BitConverter.ToString(bytes) for converting by string to hexadecimal string which I further convert it into integer or float.

But the input stream consist of 0 to show that byte value is 0. So suppose I have an integer which is represented by 2 bytes of input starting at position x and the first consist of EE while 2nd byte is 00. Now when I use BitConverter.ToString(bytes, x, 2).Replace ("-","") I get output as EE00 whose integer value is 60928 but in this case the output should be 238 that is converting only first byte EE to integer.

But in some other case the 2 bytes might be EE01 whose integer value will 60929 which is correct in this case.

Any suggestion how can I solve my problem?

Since some people are saying that question is confusing I will restate my problem I have long hexadecimal string as input. In hexadecimal string the

1) First 12 bytes represent string. 2) next 11 bytes also represent some other string. 3) Next 1 byte represent integer. 4) Next 3 bytes represent integer. 5) Next 4 bytes represent integer. 6) Next 4 bytes represent float. 7) Next 7 bytes represent string. 8) Next 5 bytes represent integer.

So for 4th case if bytes are ee 00 00 then I should neglect 0's and convert ee to integer. But if it ee 00 ee then I should convert ee00ee to integer. Also every time I will be following same pattern as mentioned above.


回答1:


This method converts a hex string to a byte array.

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;
}

From the other side:

public static string ConvertByteToHexString(byte num)
{
  var text = BitConverter.ToString(new[] { num });

  if (text.Length == 1)
  {
    text = "0" + text;
  }

  return text;
}



回答2:


My problem has been solved. I was making a mistake of Endianness. I was receiving the data as EE 00 and I should have taken it as 00 EE before converting to integer. Thanks to all who gave me solution for my problem and sorry for missing out this important fact from question.



来源:https://stackoverflow.com/questions/18311430/c-sharp-bitconverter-tostring-convert-to-hexadecimal-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!