非常奇怪的字符串转换的有关问题(有图有真相)
非常奇怪的字符串转换的问题(有图有真相)
s = Encoding.Unicode.GetString(EnBt) ‘从字节enbt中读取字符串,最后两个字节的值是182, 216
Bt = Encoding.Unicode.GetBytes(s) ’转换成字符串后,再转换成字节,最后的两个字节变成253,255,其余和enbt的相同正常。这是怎么回事呢?

请高手看看
------解决方案--------------------
谁告诉你 字节->字符串->字节 这个过程是始终不变的?
Unicode用2个字节存放编码 ≠ 全部的2字节编码都是合法的Unicode。
------解决方案--------------------
想了想用Encoding.UTF8.GetBytes也不是办法,
应该
------解决方案--------------------
自己写个加解密的算法好了,这样格式转换不靠谱。
最简单的例如什么:置换加密、位移加密
反正你自己琢磨个可逆的步骤,应该还是有效果。不要这么干
s = Encoding.Unicode.GetString(EnBt) ‘从字节enbt中读取字符串,最后两个字节的值是182, 216
Bt = Encoding.Unicode.GetBytes(s) ’转换成字符串后,再转换成字节,最后的两个字节变成253,255,其余和enbt的相同正常。这是怎么回事呢?
请高手看看
------解决方案--------------------
谁告诉你 字节->字符串->字节 这个过程是始终不变的?
Unicode用2个字节存放编码 ≠ 全部的2字节编码都是合法的Unicode。
Dim EnBt() As Byte = {182, 216}
Debug.Print(BitConverter.ToString(EnBt))
Dim s = Encoding.Unicode.GetString(EnBt)
Dim Bt() As Byte = Encoding.Unicode.GetBytes(s)
Debug.Print(BitConverter.ToString(Bt))
B6-D8
FD-FF
------解决方案--------------------
想了想用Encoding.UTF8.GetBytes也不是办法,
应该
Public Function EnCryptStr(ByVal s As String) As Byte() '加密过程
Dim Bt() As Byte = UTF8Encoding.UTF8.GetBytes(s)
Dim i, j As Int32
Dim EnBt(Bt.Length - 1) As Byte '8位1111 1111=十进制数255
For i = 0 To Bt.Length - 1
j = i + 1
EnBt(i) = Bt(i) Xor (j Mod 255)
Next
Return (EnBt)
End Function
Public Function DeCryptStr(ByVal Bt() As Byte) As String '解密过程
Dim i, j As Int32
Dim DeBt(Bt.Length - 1) As Byte
For i = 0 To Bt.Length - 1
j = i + 1
DeBt(i) = Bt(i) Xor (j Mod 255)
Next
Return UTF8Encoding.UTF8.GetString(DeBt)
End Function
------解决方案--------------------
自己写个加解密的算法好了,这样格式转换不靠谱。
最简单的例如什么:置换加密、位移加密
反正你自己琢磨个可逆的步骤,应该还是有效果。不要这么干