日期:2014-05-19  浏览次数:20981 次

有关sring to byte[] 问题 解决就结贴
如   string   str   =   "aabbccddeeff ";
怎么转换成byte[6]的形式?

------解决方案--------------------
byte[] byteArray = System.Text.Encoding.Default.GetBytes( str );
------解决方案--------------------
byte[6] ?
------解决方案--------------------
转换规则呢?
------解决方案--------------------
"aabbccddeeff " 转为 byte[] 长度是12...你要byte[6]就必须知道如何截断字符...
------解决方案--------------------
请说具体一点,是要任何的字符串转byte数组,还是只有英文字母?
如果只要英文字母,可以a-z,按0-25编码,4位二进制可以存的下~
------解决方案--------------------
byte[] ok=System.Text.Encoding.GetEncoding( "GB2312 ").GetBytes(str);
------解决方案--------------------
两个字符截断,这些字符是 0xaa,0xbb,0xcc,0xdd,0xee,0xff得来的,现在是怎么转换回去byte[6]
----------------
循环咯...

其实如果转换成字符串时巧妙一点(比如加上,或空格等分隔符)也不会成现在这样...
------解决方案--------------------
string str = "aabbccddeeff ";
int len = str.Length / 2;
byte[] arr = new byte[len];
for (int i = 0; i < len; i++)
{
arr[i] = (byte)Convert.ToByte(str.Substring(i * 2, 2), 16);
}
------解决方案--------------------
sorry,本身就byte,没必要再转换
string str = "aabbccddeeff ";
int len = str.Length / 2;
byte[] arr = new byte[len];
for (int i = 0; i < len; i++)
{
arr[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
}
------解决方案--------------------
len等于6,为了适应不同长度的情况,没有写斯,用了个变量
------解决方案--------------------
System.Text.Encoding.Default.GetBytes( str );
------解决方案--------------------
如果是任何字符串怎么转换(不包括汉字)?
------------
非合法的十六进制字符不能按上述办法转换
------解决方案--------------------
任何字符就不可能,两个字符放入一个字节了
一个字符一个字节,ASCII码
------解决方案--------------------
如果包括汉字,就更大了,一个字符要占两个字节
Unicode编码
------解决方案--------------------
System.Text.Encoding.ASCII.GetBytes( str );
System.Text.Encoding.Unicode.GetBytes( str );
------解决方案--------------------
至少也是要 byte [12] 啊
------解决方案--------------------
UnicodeEncoding encoder = new UnicodeEncoding();
string str = "aabbccddeeff ";
byte[] b = encoder.GetByte(); // 转化
Queue <byte[]> bQueue = new Queue <byte[]> ();
// 将转化结果分割列队
for (int i=5;i <b.Length;i+=6)
{
byte[] k = new byte[] {b[i-5], b[i-4], b[i-3], b[i-2], b[i-1], b[i]};
bQueue.Enqueue(k);
}
// 剩余部分补足空行
int j = b.Length mod 6
if (j> 0)
{
byte[] k = new byte[6];
for (int i=0;i <6;i++)
{
if (i <j)
{
k[i] = b[b.Length-j+i];
}
else
{
k[i]=0;
}
}
bQueue.Enqueue(k);
}
------解决方案--------------------
这个是有规律的嘛~

方法有很多,具体的偶手生。呵~