在这个转换函数中
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。