Hex string to byte array and int
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace PlugwiseLib.UTIL
{
static class ConversionClass
{
public static float HexStringToFloat(string pvVal)
{
int discarded = 0;
return BitConverter.ToSingle(ReverseBytes(GetBytes(pvVal, out discarded)), 0);
}
public static ushort HexStringToUInt16(string pvVal)
{
ushort num = 0;
if (pvVal == null)
{
return num;
}
int discarded = 0;
if (pvVal.Length == 2)
{
pvVal = "00" + pvVal;
}
if (pvVal.Length != 4)
{
return 0;
}
num = BitConverter.ToUInt16(GetBytes(pvVal, out discarded), 0);
return (ushort)((num >> 8) | (num << 8));
}
public static uint HexStringToUInt32(string pvVal)
{
int discarded = 0;
if (pvVal != null)
{
while (pvVal.Length < 8)
{
pvVal = "00" + pvVal;
}
if (pvVal.Length != 8)
{
return 0;
}
return BitConverter.ToUInt32(ReverseBytes(GetBytes(pvVal, out discarded)), 0);
}
return 0;
}
public static byte[] GetBytes(string hexString, out int discarded)
{
discarded = 0;
if (hexString == null)
{
return new byte[0];
}
string str = "";
for (int i = 0; i < hexString.Length; i++)
{
char c = hexString[i];
if (IsHexDigit(c))
{
str = str + c;
}
else
{
discarded++;
}
}
if ((str.Length % 2) != 0)
{
discarded++;
str = str.Substring(0, str.Length - 1);
}
int num2 = str.Length / 2;
byte[] buffer = new byte[num2];
int num3 = 0;
for (int j = 0; j < buffer.Length; j++)
{
string hex = new string(new char[] { str[num3], str[num3 + 1] });
buffer[j] = HexToByte(hex);
num3 += 2;
}
return buffer;
}
public static bool IsHexDigit(char c)
{
int num2 = Convert.ToInt32('A');
int num3 = Convert.ToInt32('0');
c = char.ToUpper(c);
int num = Convert.ToInt32(c);
return (((num >= num2) && (num < (num2 + 6))) || ((num >= num3) && (num < (num3 + 10))));
}
private static byte HexToByte(string hex)
{
if ((hex.Length > 2) || (hex.Length <= 0))
{
throw new ArgumentException("hex must be 1 or 2 characters in length");
}
return byte.Parse(hex, NumberStyles.HexNumber);
}
private static byte[] ReverseBytes(byte[] lvBytes)
{
for (int i = 0; i <= (Math.Round((double)(lvBytes.Length / 2)) - 1.0); i++)
{
byte num = lvBytes[lvBytes.Length - (1 + i)];
lvBytes[lvBytes.Length - (1 + i)] = lvBytes[i];
lvBytes[i] = num;
}
return lvBytes;
}
}
}
Related examples in the same category