我还没有找到解决方案,我很头疼...... D:
现在假设我有一个字符串:
string n = "74657374";
我想将其转换为字节数组。
byte[] { 0x74, 0x65, 0x73, 0x74 }; //how I want it like
最好的方法是什么?
我还没有找到解决方案,我很头疼...... D:
现在假设我有一个字符串:
string n = "74657374";
我想将其转换为字节数组。
byte[] { 0x74, 0x65, 0x73, 0x74 }; //how I want it like
最好的方法是什么?
尝试这个:
public static byte[] GetNumbers(string data)
{
if (data == null) throw new ArgumentNullException();
if (data.Length % 2 != 0
|| !data.All(char.IsDigit)) throw new ArgumentException();
List<byte> temp = new List<byte>(data.Length / 2);
for (int i = 0; i < data.Length; i += 2)
{
temp.Add(byte.Parse(string.Concat(data[i], data[i + 1]),
NumberStyles.HexNumber));
}
return temp.ToArray();
}
而且,如果字符串的格式可能不正确,请使用它(它只是一样的东西,除了TryX
格式):
public static bool TryGetNumbers(string data, out byte[] output)
{
if (data == null || data.Length % 2 != 0 || !data.All(char.IsDigit))
{
output = null;
return false;
}
List<byte> temp = new List<byte>(data.Length / 2);
for (int i = 0; i < data.Length; i += 2)
{
temp.Add(byte.Parse(string.Concat(data[i], data[i + 1]),
NumberStyles.HexNumber));
}
output = temp.ToArray();
return false;
}
如果您定义一个扩展方法来将您的序列拆分为给定大小的子序列,例如Handcraftsman'sInSetsOf
,您可以将其作为单行来执行:
string n = "74657374";
byte[] b = n.InSetsOf(2)
.Select(x => (byte)((x[0] - '0') * 16 + x[1] - '0'))
.ToArray();
此代码假定您的字符串的长度是偶数。
这是另一种方法,利用char[]
as IEnumerable<char>
:
static byte[] ToArrayOfByteValues(this string str)
{
var charArray = str.ToArray();
var byteArray = new byte[charArray.Length / 2];
for (int i = 0; i < byteArray.Length; i++)
{
var q = new StringBuilder().Append(charArray.Skip(i * 2).Take(2).ToArray<char>()).ToString();
byteArray[i] = Byte.Parse(q, System.Globalization.NumberStyles.HexNumber);
}
return byteArray;
}