将字符串监视变量视为Visual Studio“监视”或“本地”窗口中的字节数组

时间:2014-01-24 18:22:14

标签: visual-studio debugging

我正在调试一个返回短字节数组的WebAPI方法。在调用API的测试jQuery中,我有一个断点集,可以看到从WebAPI调用返回的“数据”。在Visual Studio(2013)的监视窗口中,JavaScript变量“data”的类型为“string”。我希望将字符串看作一系列字节,在0x1A 0x00 0x45样式中。我怎么能这样做?

我感兴趣的字符串数组呈现在此屏幕截图的最后一行的中心(启动“ICAgl”的那一行):

Visual Studio Watch Window Screenshot

2 个答案:

答案 0 :(得分:1)

我当时想做同样的事情,发现了这个:

<强> System.Text.Encoding.Ascii.GetBytes (数据)

希望这有帮助!

答案 1 :(得分:0)

使用ASCII编码将破坏127以上的字节。因此,如果您的字符串中恰好有非ASCII字符(通常可以通过Web api调用),您将在数组中看到错误的字节。由于C#字符串默认使用2字节Unicode字符,因此您应该使用Unicode编码来查看字符串后面的字节。如果你可以得到来自源的实际字节(例如,它可能是UTF8字节的线路?)你最好还是看看那些。但是,如果它以C#字符串的形式出现在你手中,那么使用Unicode编码将准确地显示内存中字符串的字节数。

例如。这里是一个字符串,其字符大于127(双引号)和ASCII与Uni​​code编码产生的字节,在将字符串转换回字符串后打印出字符串。 ASCII是有损的。

string data = "I said \u201cHello\u201d";
byte[] dataArrASCII = System.Text.Encoding.ASCII.GetBytes(data);
byte[] dataArrUnicode = System.Text.Encoding.Unicode.GetBytes(data);

dataArrrASCII length: 14
49 20 73 61 69 64 20 3F: I said ?
48 65 6C 6C 6F 3F      : Hello?

dataArrUnicode length: 28
49 00 20 00 73 00 61 00: I sa
69 00 64 00 20 00 1C 20: id “
48 00 65 00 6C 00 6C 00: Hell
6F 00 1D 20            : o”