string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9"
splitRHash2 = splitRHash.Split('|');
foreach (string i in splitRHash2)
{
//BYTEARRAY += Convert.ToByte(Convert.ToInt32(i, 16))???
}
我不知道怎么回事。我只想要这个十六进制字符串:
4ADA6CA9C2D571EF6E2A8CC3C94D36B9
进入一个16字节的字节数组。这将极大地帮助我从' hash'中调用这些值。并使用它稍后为项目添加圆键。问题是,我不知道如何在不使用.split方法的情况下以2为增量获取字符串。 有任何想法吗?谢谢!
答案 0 :(得分:1)
只需使用LINQ将拆分的字符串转换为字节,然后转换为数组。这是代码:
string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9";
string[] splittedHash = hash.Split('|');
byte[] byteHash = splittedHash.Select(b => Convert.ToByte(b, 16)).ToArray();
答案 1 :(得分:0)
SELECT REPLACE(CONVERT(CHAR(10), date_field, 120),' ','-') + '-' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(HOUR, date_field)), 2) + ':00:00' as CalculatedTime,
COUNT(PingLogID) AS PingCount
FROM tbl_PingLog
GROUP BY REPLACE(CONVERT(CHAR(10), date_field, 120),' ','-') + '-' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(HOUR, date_field)), 2) + ':00:00'
ORDER BY REPLACE(CONVERT(CHAR(10), date_field, 120),' ','-') + '-' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(HOUR, date_field)), 2) + ':00:00'
答案 2 :(得分:0)
您可以使用基本数据结构和O(n)时间来制作解决方案。
string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9";
byte[] result = new byte[16];
int i = 0;
int j = 0;
while(i < hash.Length)
{
byte value = (byte)(HexCharToByte(hash[i]) * 16 + HexCharToByte(hash[i + 1]));
result[j] = value;
i += 3;
j++;
}
对于HexCharToByte()
,您可以构成以下内容:
static byte HexCharToByte(char c)
{
HashSet<char> NumSet = new HashSet<char>( new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} );
HashSet<char> CharSet = new HashSet<char>( new char[] { 'A', 'B', 'C', 'D', 'E', 'F' } );
if (NumSet.Contains(c))
{
return (byte)(c - '0');
}
else if (CharSet.Contains(c))
{
return (byte)(c - 'A' + 10);
}
throw new InvalidArgumentException("c");
}