我如何转换string为byte[]在.NET(C#),而无需手动指定一个特定的编码?
我要加密字符串.我可以在不转换的情况下加密它,但我仍然想知道为什么编码在这里发挥作用.
另外,为什么要考虑编码?我不能简单地得到字符串存储的字节数吗?为什么依赖于字符编码?
在Page1.aspx中,我有
byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + byt,false);
Run Code Online (Sandbox Code Playgroud)
TextBox1的值是"mnop".
现在在Page2.aspx我有以下代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]);
var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length);
var x2 = Encoding.UTF8.GetString(byteArray);
}
}
Run Code Online (Sandbox Code Playgroud)
x1输出是U3lzdGVtLkJ5dGVbXQ ==
x2输出是System.Byte []
但是如何让"mnop"回归?我错过了什么?
甚至C#:我如何安全地将字节数组转换为字符串并返回?给出了答案为U3lzdGVtLkJ5dGVbXQ ==
谢谢.
是否有一种简单的方法将字节数组转换为字符串,以便下面的单元测试通过?我找不到适用于所有值的编码.
[TestMethod]
public void TestBytToString()
{
byte[] bytArray = new byte[256];
for (int i = 0; i < bytArray.Length; i++)
{
bytArray[i] = (byte)i;
}
string x = System.Text.Encoding.Default.GetString(bytArray);
for (int i = 0; i < x.Length; i++)
{
int y = (int)x[i];
Assert.AreEqual(i, y);
}
}
Run Code Online (Sandbox Code Playgroud)