C#字符串string运行效率的问题

handi 2004-08-17 10:23:09
字节 b[7000] , 首先每个字节求异或,然后相加到一个字符串:
str = "";
for (int i=0;i<7000;i++)
str += ... byte[i] ^ bt_key.....


可是速度非常慢,请问有什么好的办法吗? 谢谢
...全文
246 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lexchou 2004-08-17
  • 打赏
  • 举报
回复
To btut2004:
0xFA的F和A都在闭区间[0x0,0xF]中间,一共有16个,二进制分布分别从 0000到1111
0xFA的二进制是11111010
0xFA >>4后就将前4位移到后4位来了,成了 1111
而0xFA & 0xF 就是 11111010 & 1111 =1010了:
11111010
AND 00001111
____________
00001010
所以就这样将前后4位分开了
pipibug 2004-08-17
  • 打赏
  • 举报
回复
lexchou强!

起名叫周lex看来是对字处理方面很自信的周
onlyxu 2004-08-17
  • 打赏
  • 举报
回复
用StringBuilder
handi 2004-08-17
  • 打赏
  • 举报
回复
这段代码是我从C++炒得。C++的运行速度很快的
张海霖 2004-08-17
  • 打赏
  • 举报
回复
看来我要好好补习一下了,不忙的时候我会再看的,现在还无法理解。
lexchou 2004-08-17
  • 打赏
  • 举报
回复
例如tmp为 0xFA
tmp>>4后就等于 0xF了,在HEX_TABLE中第0xF位的是字符 'F'
tmp & 0xf后就等于 0xA了,在HEX_TABLE中第0xA位的字符是'A'
所以这样就完成了Byte -> String的快速转换了
张海霖 2004-08-17
  • 打赏
  • 举报
回复
sb[idx++]=HEX_TABLE[tmp >>4];//你右移它想达到什么目的
sb[idx++]=HEX_TABLE[tmp & 0xf];//执行与操作干什么?
iiboy 2004-08-17
  • 打赏
  • 举报
回复
嗯!
像這樣的處理,也許不會有很大的改進之處吧,除非有更快速的CPU與更多的Memory
lexchou 2004-08-17
  • 打赏
  • 举报
回复
bt_key是从他的代码里抄的。
看他代码,应该是XOR加密。bt_key应该是byte类型的密钥(key)
张海霖 2004-08-17
  • 打赏
  • 举报
回复
学习,看不懂,bt_key是什么?
能具体讲一下吗?
lexchou 2004-08-17
  • 打赏
  • 举报
回复
const string HEX_TABLE="0123456789ABCDEF";
StringBuilder sb=new StringBuilder();
sb.SetLength(7000*2);
byte tmp;
int idx=0;
for(int i=0;i<7000;i++)
{
tmp=byte[i]^bt_key;
sb[idx++]=HEX_TABLE[tmp >>4];
sb[idx++]=HEX_TABLE[tmp & 0xf];
}

MessageBox.Show(sb.ToString());

改用这种方法,效率可以极大提升
lexchou 2004-08-17
  • 打赏
  • 举报
回复
对于你问题的解决方法,可以用StringBuilder来代替String。例如可以先分配好长度,然后在通过索引来访问每个字符。或者用Append方法来添加
lexchou 2004-08-17
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView.asp?id=3233892

Java的string、StringBuffer、C++(C++ Builder)的AnsiString、STL String、Delphi的String和汇编写的类StringBuilder、C#的StringBuilder、C#的String

的详细比较

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧