考虑下面的单元测试:为什么不是Guid.ToString(“n”)与从同一个GUID的字节数组生成的十六进制字符串相同?
[TestMethod]
public void TestByteToString()
{
var guid = new Guid("61772f3ae5de5f4a8577eb1003c5c054");
var guidString = guid.ToString("n");
var byteString = ToHexString(guid.ToByteArray());
Assert.AreEqual(guidString, byteString);
}
private String ToHexString(Byte[] bytes)
{
var hex = new StringBuilder(bytes.Length * 2);
foreach(var b in bytes)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
这里的结果:
Assert.AreEqual failed. Expected:<61772f3ae5de5f4a8577eb1003c5c054>. Actual:<3a2f7761dee54a5f8577eb1003c5c054>.
为什么'b'和'c'也不能倒过来? – Sebastian 2012-01-18 20:32:00
@SebastianGodelet - 因为它们是'short'而不是'int'。 – ChrisF 2012-01-18 21:03:01
我认为大于一个字节的内容都会受到永久性限制:'short s = 0xaf21;'可以存储:| af | 21 |或| 21 | af | – Sebastian 2012-01-18 21:47:53