string values to byte array without converting
我试图将字符串的值放入字节数组,而不更改字符。这是因为字符串实际上是数据的字节表示。
目标是将输入字符串移动到字节数组中,然后使用以下方法转换字节数组:
1 | string result = System.Text.Encoding.UTF8.GetString(data); |
我希望有人能帮助我,尽管我知道这不是一个很好的描述。
编辑:也许我应该解释一下,我正在研究的是一个简单的Windows窗体,它有一个文本框,用户可以在其中复制编码的数据,然后单击预览查看解码的数据。
编辑:再多一点代码:(inputText是文本框)
1 2 3 4 5 6 7 8 9 10 11 12 | private void button1_Click(object sender, EventArgs e) { string inputString = this.inputText.Text; byte[] input = new byte[inputString.Length]; for (int i = 0; i < inputString.Length; i++) { input[i] = inputString[i]; } string output = base64Decode(input); this.inputText.Text =""; this.inputText.Text = output; } |
这是Windows窗体的一部分,它包含一个富文本框。此代码不起作用,因为它不允许我将类型char转换为byte。但是如果我把行改为:
1 2 3 4 5 6 7 8 9 10 11 12 | private void button1_Click(object sender, EventArgs e) { string inputString = this.inputText.Text; byte[] input = new byte[inputString.Length]; for (int i = 0; i < inputString.Length; i++) { input[i] = (byte)inputString[i]; } string output = base64Decode(input); this.inputText.Text =""; this.inputText.Text = output; } |
它对值进行编码,我不想这样。我希望这能更好地解释我想做的事情。
编辑:base64解码功能:
1 2 3 4 5 6 7 8 9 10 11 12 | public string base64Decode(byte[] data) { try { string result = System.Text.Encoding.UTF8.GetString(data); return result; } catch (Exception e) { throw new Exception("Error in base64Decode" + e.Message); } } |
字符串不是使用base64编码的,只是为了清晰起见。以我的名义,这是个糟糕的名字。
注意这只是一行输入。
我明白了。问题是我总是试图解码错误的格式。我觉得很愚蠢,因为当我发布示例输入时,我看到它必须是十六进制的,所以从那时起很容易。我用这个网站作为参考:http://msdn.microsoft.com/en-us/library/bb311038.aspx
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public string[] getHexValues(string s) { int j = 0; string[] hex = new String[s.Length/2]; for (int i = 0; i < s.Length-2; i += 2) { string temp = s.Substring(i, 2); this.inputText.Text = temp; if (temp.Equals("0x")) ; else { hex[j] = temp; j++; } } return hex; } public string convertFromHex(string[] hex) { string result = null; for (int i = 0; i < hex.Length; i++) { int value = Convert.ToInt32(hex[i], 16); result += Char.ConvertFromUtf32(value); } return result; } |
我现在觉得自己很笨,但感谢所有帮助过我的人,尤其是在乔恩·斯基特。
你说你有点像这样:
1 | string s ="48656c6c6f2c20776f726c6421"; |
论文的价值和你想作为一个字节数组?然后:
1 2 3 4 5 | public IEnumerable<byte> GetBytesFromByteString(string s) { for (int index = 0; index < s.Length; index += 2) { yield return Convert.ToByte(s.Substring(index, 2), 16); } } |
用法:
1 2 | string s ="48656c6c6f2c20776f726c6421"; var bytes = GetBytesFromByteString(s).ToArray(); |
注意的是,输出
1 | Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(bytes)); |
是
1 | Hello, world! |
你显然需要补焊安全上面的方法。
单向的待办事项会写:
1 |
这将给你一个字符串的字符的每一个有单字节数组。
另一个办法是使用8位字符编码。例如:
1 2 | var MyEncoding = Encoding.GetEncoding("windows-1252"); string s = MyEncoding.GetString(bytes); |
我认为所有的256个字符定义windows 1252,虽然我不确定。如果它不好,你会最终与转换特征。你应该能够找到在8位编码,这将不做任何转换。但也许你是更好的开关使用的字节到字符环以上。
安切洛蒂:逆向法编码
1 2 3 4 5 | byte[] data = System.Text.Encoding.UTF8.GetBytes(originalString); string result = System.Text.Encoding.UTF8.GetString(data); Debug.Assert(result == originalString); |
但你的意思是不清楚!没有转换。
你有没有试过:
1 2 | string s ="...."; System.Text.UTF8Encoding.UTF8.GetBytes(s); |