二进制
00000000 10000000 00010000 00001100 00000001 00000000转10进制
0 128 16 12 1 0再把这6个10进制数分别转化为6个char字符,最后用base64 将char转为8个字符:手动转换结果 AIAQ DAEA
代码:
string strRet = ""; //6个10进制数
int[] intTen = new int[6]; //总长度 48bit = 6byte
char[] intChar = new char[6]; //{ 0, 128, 16, 12, 1, 0 }; for (int i = 0; i < 6; i++)
{
intTen[i] = int.Parse(SG_TwoToTen(long.Parse(s_customer.Substring(i * 8, 8))).ToString()); //intChar[i] = (char)intTen[i];
intChar[i] = Convert.ToChar(intTen[i]); //strRet += " " + intTen[i];
} //strRet += "_"; strRet += Convert.ToBase64String(Encoding.Default.GetBytes(intChar));最后 结果AD8QDAEA与手动转换的结果不同!分析原因 10000000 转换成十进制 128 再转char 后signed char 范围-128~~128 有越界嫌隙求解决办法!
00000000 10000000 00010000 00001100 00000001 00000000转10进制
0 128 16 12 1 0再把这6个10进制数分别转化为6个char字符,最后用base64 将char转为8个字符:手动转换结果 AIAQ DAEA
代码:
string strRet = ""; //6个10进制数
int[] intTen = new int[6]; //总长度 48bit = 6byte
char[] intChar = new char[6]; //{ 0, 128, 16, 12, 1, 0 }; for (int i = 0; i < 6; i++)
{
intTen[i] = int.Parse(SG_TwoToTen(long.Parse(s_customer.Substring(i * 8, 8))).ToString()); //intChar[i] = (char)intTen[i];
intChar[i] = Convert.ToChar(intTen[i]); //strRet += " " + intTen[i];
} //strRet += "_"; strRet += Convert.ToBase64String(Encoding.Default.GetBytes(intChar));最后 结果AD8QDAEA与手动转换的结果不同!分析原因 10000000 转换成十进制 128 再转char 后signed char 范围-128~~128 有越界嫌隙求解决办法!
static void Main(string[] args)
{
byte[] data = new byte[] { 0, 128, 16, 12, 1, 0 };
string result = Convert.ToBase64String(data, 0, data.Length);
Console.WriteLine(result);
Console.ReadKey();
}
结果:
AIAQDAEA