在这个转换函数中
public static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.tocharArray(),bytes,bytes.Length); return bytes; } byte[] test = GetBytes("abc");
结果数组包含零个字符
test = [97,98,99,0]
当我们将byte []转换成字符串,结果是
string test = "a b c "
我们如何使它不会创建这些零
解决方法
首先让我们来看看你的代码错了什么
char
是.NET框架中的16位(2字节).这意味着当你写sizeof(char)时,它返回2. str.Length是1,所以实际上你的代码将是byte [] bytes = new byte [2]是相同的字节[2].因此,当您使用
Buffer.BlockCopy()
方法时,实际上将2个字节从源数组复制到目标数组.这意味着如果您的字符串为“”,您的GetBytes()方法返回字节[0] = 32,字节[1] = 0.
尝试使用Encoding.ASCII.GetBytes()
.
When overridden in a derived class,encodes all the characters in the
specified string into a sequence of bytes.
const string input = "Soner Gonul"; byte[] array = Encoding.ASCII.GetBytes(input); foreach ( byte element in array ) { Console.WriteLine("{0} = {1}",element,(char)element); }
输出:
83 = S 111 = o 110 = n 101 = e 114 = r 32 = 71 = G 111 = o 110 = n 117 = u 108 = l