代码写的真乱,不会用循环吗,写那么多无用的代码出来
想知道到底哪里不对,断点一步一步跟啊
比如这里string y = y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8
你看y确实是把后面的8个按字符串拼接起来了,还是按数值相加了?
想知道到底哪里不对,断点一步一步跟啊
比如这里string y = y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8
你看y确实是把后面的8个按字符串拼接起来了,还是按数值相加了?
if (y == p)
{
}
断点跟,你会发现y根本和p不相等
虽然这两个字符串看起来相同,但是它们的编码根本不一样
不是什么字符都能按Unicode转的
string y1 = Convert.ToChar(49164).ToString(); //转换成字符串
string y2 = Convert.ToChar(56320).ToString();
先:
byte[] m1 = System.Text.Encoding.Unicode.GetBytes(y1); //转换为byte[]
byte[] m2 = System.Text.Encoding.Unicode.GetBytes(y2); //转换为byte[]
再:
string p1 = System.Text.Encoding.Unicode.GetString(m1); //转换为string
string p2 = System.Text.Encoding.Unicode.GetString(m2); //转换为string
//继续
int a1=Convert.ToInt32(p1[0]); //转换为整型数
int a2=Convert.ToInt32(p2[0]); //转换为整型数
//结果:
a1=49164 (原来是:49164)
a2=65533(原来是:56320) 哪里错了?如何改?
string y1 = Convert.ToChar(65533).ToString(); //转换成字符串
string y2 = Convert.ToChar(56320).ToString();
byte[] m1 = System.Text.Encoding.Unicode.GetBytes(y1); //转换为byte[]
byte[] m2 = System.Text.Encoding.Unicode.GetBytes(y2); //转换为byte[]
string p1 = System.Text.Encoding.Unicode.GetString(m1); //转换为string
string p2 = System.Text.Encoding.Unicode.GetString(m2); //转换为string
//继续
int a1 = Convert.ToInt32(p1[0]); //转换为整型数
int a2 = Convert.ToInt32(p2[0]); //转换为整型数不是Unicode的问题,是字符串和字符本身就不是一一对应的,多个字符编码对应的同一个字符
你用字符编码转字符的时候,没有问题,但是字符再转回字符编码,只能转成一个,而不能转成多个
一般的字符可以用两个字节(也就是一个char)来表示。但是有些特殊的字符需要用4个字节来表示。为了区别两个字节和四个字节,四个字节有些特殊的规律,比如低两个字节的范围为U+DC00到U+DFFF,英文叫low surrogate。你的例子中的56320,只好落在low surrogate范围。当byte[]转换为string的时候,单个surrogate是非法的(期待两个surrogate,四个字节),因此给出转换错误的替代字符。结论:使用Unicode来转化字节串到字符串,再回到字节串,是不安全的!
字节串~字符串的转换用用以下方式来做:
Convert.ToBase64String
Convert.FromBase64String
正在设计一个加密算法,换个思路成功了