我试图在c ++ cli中构建一个十六进制编辑器,并让它将二进制文件读取到richtext框,并将富文本框中的二进制文件写入空文件。它工作正常,但阅读速度慢,尤其是写作。有人可以告诉我如何修复这些代码或更好地共同完成这一切。
是的我知道256 if语句会减慢写入速度,但我无法弄清楚如何转换数据系统:: string来写出来。
作者需要2分钟才能写出50kb,而读者需要10秒才能读取50kb。我觉得这很慢
感谢
阅读器
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
richTextBox1->Text = "";
String^ datafile = openFileDialog1->FileName;
FileStream fs(datafile, FileMode::Open);
BinaryReader br(%fs);
String^ data;
String^ datatotal;
double progressBar1count = 0;
double length = fs.Length;
progressBar1->Maximum = 100;
unsigned char byte;
for (__int64 count = 0, count_max = fs.Length; count < count_max; ++count)
{
byte = br.ReadByte();
data = byte.ToString(L"x2");
datatotal = datatotal + data;
Application::DoEvents();
progressBar1count += 1;
progressBar1->Value = progressBar1count / length * 100;
}
datatotal = datatotal->ToUpper();
richTextBox1->Text = datatotal;
}
progressBar1->Value = 0;
作家
if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
String^ datafile = saveFileDialog1->FileName;
String^ data = richTextBox1->Text;
double length = data->Length;
progressBar1->Maximum = 100;
int count = 0;
double countlength = 0;
string databasicstring;
fstream f(
"C:\\users\\patchvista2\\b.exe",
ios::out | ios::binary
);
while (countlength < length - 1)
{
String^ data = richTextBox1->Text;
f.seekp(count, ios::beg );
data = data->Substring(countlength , 2);
count += 1;
countlength += 2;
progressBar1->Value = countlength / length * 100;
if (data == "00") {
f.put(0x00);
}
if (data == "01") {
f.put(0x01);
}
if (data == "02") {
f.put(0x02);
}
if (data == "03") {
f.put(0x03);
}
if (data == "04") {
f.put(0x04);
}
if (data == "05") {
f.put(0x05);
}
if (data == "06") {
f.put(0x06);
}
if (data == "07") {
f.put(0x07);
}
if (data == "08") {
f.put(0x08);
}
if (data == "09") {
f.put(0x09);
}
if (data == "0A") {
f.put(0x0A);
}
if (data == "0B") {
f.put(0x0B);
}
if (data == "0C") {
f.put(0x0C);
}
if (data == "0D") {
f.put(0x0D);
}
if (data == "0E") {
f.put(0x0E);
}
if (data == "0F") {
f.put(0x0F);
}
if (data == "10") {
f.put(0x10);
}
if (data == "11") {
f.put(0x11);
}
if (data == "12") {
f.put(0x12);
}
if (data == "13") {
f.put(0x13);
}
if (data == "14") {
f.put(0x14);
}
if (data == "15") {
f.put(0x15);
}
if (data == "16") {
f.put(0x16);
}
if (data == "17") {
f.put(0x17);
}
if (data == "18") {
f.put(0x18);
}
if (data == "19") {
f.put(0x19);
}
if (data == "1A") {
f.put(0x1A);
}
if (data == "1B") {
f.put(0x1B);
}
if (data == "1C") {
f.put(0x1C);
}
if (data == "1D") {
f.put(0x1D);
}
if (data == "1E") {
f.put(0x1E);
}
if (data == "1F") {
f.put(0x1F);
}
if (data == "20") {
f.put(0x20);
}
if (data == "21") {
f.put(0x21);
}
if (data == "22") {
f.put(0x22);
}
if (data == "23") {
f.put(0x23);
}
if (data == "24") {
f.put(0x24);
}
if (data == "25") {
f.put(0x25);
}
if (data == "26") {
f.put(0x26);
}
if (data == "27") {
f.put(0x27);
}
if (data == "28") {
f.put(0x28);
}
if (data == "29") {
f.put(0x29);
}
if (data == "2A") {
f.put(0x2A);
}
if (data == "2B") {
f.put(0x2B);
}
if (data == "2C") {
f.put(0x2C);
}
if (data == "2D") {
f.put(0x2D);
}
if (data == "2E") {
f.put(0x2E);
}
if (data == "2F") {
f.put(0x2F);
}
if (data == "30") {
f.put(0x30);
}
if (data == "31") {
f.put(0x31);
}
if (data == "32") {
f.put(0x32);
}
if (data == "33") {
f.put(0x33);
}
if (data == "34") {
f.put(0x34);
}
if (data == "35") {
f.put(0x35);
}
if (data == "36") {
f.put(0x36);
}
if (data == "37") {
f.put(0x37);
}
if (data == "38") {
f.put(0x38);
}
if (data == "39") {
f.put(0x39);
}
if (data == "3A") {
f.put(0x3A);
}
if (data == "3B") {
f.put(0x3B);
}
if (data == "3C") {
f.put(0x3C);
}
if (data == "3D") {
f.put(0x3D);
}
if (data == "3E") {
f.put(0x3E);
}
if (data == "3F") {
f.put(0x3F);
}
if (data == "40") {
f.put(0x40);
}
if (data == "41") {
f.put(0x41);
}
if (data == "42") {
f.put(0x42);
}
if (data == "43") {
f.put(0x43);
}
if (data == "44") {
f.put(0x44);
}
if (data == "45") {
f.put(0x45);
}
if (data == "46") {
f.put(0x46);
}
if (data == "47") {
f.put(0x47);
}
if (data == "48") {
f.put(0x48);
}
if (data == "49") {
f.put(0x49);
}
if (data == "4A") {
f.put(0x4A);
}
if (data == "4B") {
f.put(0x4B);
}
if (data == "4C") {
f.put(0x4C);
}
if (data == "4D") {
f.put(0x4D);
}
if (data == "4E") {
f.put(0x4E);
}
if (data == "4F") {
f.put(0x4F);
}
if (data == "50") {
f.put(0x50);
}
if (data == "51") {
f.put(0x51);
}
if (data == "52") {
f.put(0x52);
}
if (data == "53") {
f.put(0x53);
}
if (data == "54") {
f.put(0x54);
}
if (data == "55") {
f.put(0x55);
}
if (data == "56") {
f.put(0x56);
}
if (data == "57") {
f.put(0x57);
}
if (data == "58") {
f.put(0x58);
}
if (data == "59") {
f.put(0x59);
}
if (data == "5A") {
f.put(0x5A);
}
if (data == "5B") {
f.put(0x5B);
}
if (data == "5C") {
f.put(0x5C);
}
if (data == "5D") {
f.put(0x5D);
}
if (data == "5E") {
f.put(0x5E);
}
if (data == "5F") {
f.put(0x5F);
}
if (data == "60") {
f.put(0x60);
}
if (data == "61") {
f.put(0x61);
}
if (data == "62") {
f.put(0x62);
}
if (data == "63") {
f.put(0x63);
}
if (data == "64") {
f.put(0x64);
}
if (data == "65") {
f.put(0x65);
}
if (data == "66") {
f.put(0x66);
}
if (data == "67") {
f.put(0x67);
}
if (data == "68") {
f.put(0x68);
}
if (data == "69") {
f.put(0x69);
}
if (data == "6A") {
f.put(0x6A);
}
if (data == "6B") {
f.put(0x6B);
}
if (data == "6C") {
f.put(0x6C);
}
if (data == "6D") {
f.put(0x6D);
}
if (data == "6E") {
f.put(0x6E);
}
if (data == "6F") {
f.put(0x6F);
}
if (data == "70") {
f.put(0x70);
}
if (data == "71") {
f.put(0x71);
}
if (data == "72") {
f.put(0x72);
}
if (data == "73") {
f.put(0x73);
}
if (data == "74") {
f.put(0x74);
}
if (data == "75") {
f.put(0x75);
}
if (data == "76") {
f.put(0x76);
}
if (data == "77") {
f.put(0x77);
}
if (data == "78") {
f.put(0x78);
}
if (data == "79") {
f.put(0x79);
}
if (data == "7A") {
f.put(0x7A);
}
if (data == "7B") {
f.put(0x7B);
}
if (data == "7C") {
f.put(0x7C);
}
if (data == "7D") {
f.put(0x7D);
}
if (data == "7E") {
f.put(0x7E);
}
if (data == "7F") {
f.put(0x7F);
}
if (data == "80") {
f.put(0x80);
}
if (data == "81") {
f.put(0x81);
}
if (data == "82") {
f.put(0x82);
}
if (data == "83") {
f.put(0x83);
}
if (data == "84") {
f.put(0x84);
}
if (data == "85") {
f.put(0x85);
}
if (data == "86") {
f.put(0x86);
}
if (data == "87") {
f.put(0x87);
}
if (data == "88") {
f.put(0x88);
}
if (data == "89") {
f.put(0x89);
}
if (data == "8A") {
f.put(0x8A);
}
if (data == "8B") {
f.put(0x8B);
}
if (data == "8C") {
f.put(0x8C);
}
if (data == "8D") {
f.put(0x8D);
}
if (data == "8E") {
f.put(0x8E);
}
if (data == "8F") {
f.put(0x8F);
}
if (data == "90") {
f.put(0x90);
}
if (data == "91") {
f.put(0x91);
}
if (data == "92") {
f.put(0x92);
}
if (data == "93") {
f.put(0x93);
}
if (data == "94") {
f.put(0x94);
}
if (data == "95") {
f.put(0x95);
}
if (data == "96") {
f.put(0x96);
}
if (data == "97") {
f.put(0x97);
}
if (data == "98") {
f.put(0x98);
}
if (data == "99") {
f.put(0x99);
}
if (data == "9A") {
f.put(0x9A);
}
if (data == "9B") {
f.put(0x9B);
}
if (data == "9C") {
f.put(0x9C);
}
if (data == "9D") {
f.put(0x9D);
}
if (data == "9E") {
f.put(0x9E);
}
if (data == "9F") {
f.put(0x9F);
}
if (data == "A0") {
f.put(0xA0);
}
if (data == "A1") {
f.put(0xA1);
}
if (data == "A2") {
f.put(0xA2);
}
if (data == "A3") {
f.put(0xA3);
}
if (data == "A4") {
f.put(0xA4);
}
if (data == "A5") {
f.put(0xA5);
}
if (data == "A6") {
f.put(0xA6);
}
if (data == "A7") {
f.put(0xA7);
}
if (data == "A8") {
f.put(0xA8);
}
if (data == "A9") {
f.put(0xA9);
}
if (data == "AA") {
f.put(0xAA);
}
if (data == "AB") {
f.put(0xAB);
}
if (data == "AC") {
f.put(0xAC);
}
if (data == "AD") {
f.put(0xAD);
}
if (data == "AE") {
f.put(0xAE);
}
if (data == "AF") {
f.put(0xAF);
}
if (data == "B0") {
f.put(0xB0);
}
if (data == "B1") {
f.put(0xB1);
}
if (data == "B2") {
f.put(0xB2);
}
if (data == "B3") {
f.put(0xB3);
}
if (data == "B4") {
f.put(0xB4);
}
if (data == "B5") {
f.put(0xB5);
}
if (data == "B6") {
f.put(0xB6);
}
if (data == "B7") {
f.put(0xB7);
}
if (data == "B8") {
f.put(0xB8);
}
if (data == "B9") {
f.put(0xB9);
}
if (data == "BA") {
f.put(0xBA);
}
if (data == "BB") {
f.put(0xBB);
}
if (data == "BC") {
f.put(0xBC);
}
if (data == "BD") {
f.put(0xBD);
}
if (data == "BE") {
f.put(0xBE);
}
if (data == "BF") {
f.put(0xBF);
}
if (data == "C0") {
f.put(0xC0);
}
if (data == "C1") {
f.put(0xC1);
}
if (data == "C2") {
f.put(0xC2);
}
if (data == "C3") {
f.put(0xC3);
}
if (data == "C4") {
f.put(0xC4);
}
if (data == "C5") {
f.put(0xC5);
}
if (data == "C6") {
f.put(0xC6);
}
if (data == "C7") {
f.put(0xC7);
}
if (data == "C8") {
f.put(0xC8);
}
if (data == "C9") {
f.put(0xC9);
}
if (data == "CA") {
f.put(0xCA);
}
if (data == "CB") {
f.put(0xCB);
}
if (data == "CC") {
f.put(0xCC);
}
if (data == "CD") {
f.put(0xCD);
}
if (data == "CE") {
f.put(0xCE);
}
if (data == "CF") {
f.put(0xCF);
}
if (data == "D0") {
f.put(0xD0);
}
if (data == "D1") {
f.put(0xD1);
}
if (data == "D2") {
f.put(0xD2);
}
if (data == "D3") {
f.put(0xD3);
}
if (data == "D4") {
f.put(0xD4);
}
if (data == "D5") {
f.put(0xD5);
}
if (data == "D6") {
f.put(0xD6);
}
if (data == "D7") {
f.put(0xD7);
}
if (data == "D8") {
f.put(0xD8);
}
if (data == "D9") {
f.put(0xD9);
}
if (data == "DA") {
f.put(0xDA);
}
if (data == "DB") {
f.put(0xDB);
}
if (data == "DC") {
f.put(0xDC);
}
if (data == "DD") {
f.put(0xDD);
}
if (data == "DE") {
f.put(0xDE);
}
if (data == "DF") {
f.put(0xDF);
}
if (data == "E0") {
f.put(0xE0);
}
if (data == "E1") {
f.put(0xE1);
}
if (data == "E2") {
f.put(0xE2);
}
if (data == "E3") {
f.put(0xE3);
}
if (data == "E4") {
f.put(0xE4);
}
if (data == "E5") {
f.put(0xE5);
}
if (data == "E6") {
f.put(0xE6);
}
if (data == "E7") {
f.put(0xE7);
}
if (data == "E8") {
f.put(0xE8);
}
if (data == "E9") {
f.put(0xE9);
}
if (data == "EA") {
f.put(0xEA);
}
if (data == "EB") {
f.put(0xEB);
}
if (data == "EC") {
f.put(0xEC);
}
if (data == "ED") {
f.put(0xED);
}
if (data == "EE") {
f.put(0xEE);
}
if (data == "EF") {
f.put(0xEF);
}
if (data == "F0") {
f.put(0xF0);
}
if (data == "F1") {
f.put(0xF1);
}
if (data == "F2") {
f.put(0xF2);
}
if (data == "F3") {
f.put(0xF3);
}
if (data == "F4") {
f.put(0xF4);
}
if (data == "F5") {
f.put(0xF5);
}
if (data == "F6") {
f.put(0xF6);
}
if (data == "F7") {
f.put(0xF7);
}
if (data == "F8") {
f.put(0xF8);
}
if (data == "F9") {
f.put(0xF9);
}
if (data == "FA") {
f.put(0xFA);
}
if (data == "FB") {
f.put(0xFB);
}
if (data == "FC") {
f.put(0xFC);
}
if (data == "FD") {
f.put(0xFD);
}
if (data == "FE") {
f.put(0xFE);
}
if (data == "FF") {
f.put(0xFF);
}
}
f.close();
progressBar1->Value = 0;
MessageBox::Show("done saving the file");
}
答案 0 :(得分:1)
首先,如果在作者端的循环的每次迭代开始时没有指定String^ data = richTextBox1->Text;
,则可以节省时间。相反,为什么不声明另一个变量(temp
)并保持data
相同以减少赋值操作?例如:
String temp;
temp = data->Substring(countlength , 2);
然后,您可以在编写例程中从循环开始有效地删除data = data->Substring(countlength , 2);
。
其次,熟悉strtol()。此函数可以有效地将字符串(char *
)转换为任何基数的整数。例如:
char * string = "0f";
int num = strtol(string, NULL, 16); //Using base 16 (hex)
num
int这个案例将是15
或0x0F
十六进制。这基本上将取代您的if
语句堆。
减少对Application::DoEvents();
的调用,因为如果您每次读取一个字节时都不需要重新绘制,这会成本太高。相反,例如以10%的间隔重新绘制。每次迭代都要进行的另一个昂贵的调用是progressBar1->Value = progressBar1count / length * 100;
,但这也与整个重绘概念有关。换句话说,以比每个字节更合理的间隔更新GUI 。
编辑1:将strtol(s, NULL, 16)
更改为strtol(string, NULL, 16)
编辑2:对读者/作者段分开回答。