Hex Editor: Speedup FindPrev/FindNext
This commit is contained in:
parent
549b484c21
commit
b28d159023
|
@ -235,6 +235,28 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return str.Select(Convert.ToByte).ToArray();
|
return str.Select(Convert.ToByte).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte[] ConvertHexStringToByteArray(string str)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(str)) {
|
||||||
|
return new byte[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Better method of handling this?
|
||||||
|
if (str.Length % 2 == 1)
|
||||||
|
{
|
||||||
|
str += "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] bytes = new byte[str.Length / 2];
|
||||||
|
|
||||||
|
for (int i = 0; i < str.Length; i += 2)
|
||||||
|
{
|
||||||
|
bytes[i / 2] = Convert.ToByte(str.Substring(i, 2), 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
public void FindNext(string value, bool wrap)
|
public void FindNext(string value, bool wrap)
|
||||||
{
|
{
|
||||||
long found = -1;
|
long found = -1;
|
||||||
|
@ -261,16 +283,20 @@ namespace BizHawk.Client.EmuHawk
|
||||||
startByte = _addressHighlighted + DataSize;
|
startByte = _addressHighlighted + DataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte[] searchBytes = ConvertHexStringToByteArray(search);
|
||||||
for (var i = startByte; i < (_domain.Size - numByte); i++)
|
for (var i = startByte; i < (_domain.Size - numByte); i++)
|
||||||
{
|
{
|
||||||
var ramblock = new StringBuilder();
|
bool differenceFound = false;
|
||||||
for (var j = 0; j < numByte; j++)
|
for (var j = 0; j < numByte; j++)
|
||||||
{
|
{
|
||||||
ramblock.Append(string.Format("{0:X2}", (int)_domain.PeekByte(i + j)));
|
if (_domain.PeekByte(i + j) != searchBytes[j])
|
||||||
|
{
|
||||||
|
differenceFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var block = ramblock.ToString().ToUpper();
|
if (!differenceFound)
|
||||||
if (search == block)
|
|
||||||
{
|
{
|
||||||
found = i;
|
found = i;
|
||||||
break;
|
break;
|
||||||
|
@ -313,16 +339,19 @@ namespace BizHawk.Client.EmuHawk
|
||||||
startByte = _addressHighlighted - 1;
|
startByte = _addressHighlighted - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte[] searchBytes = ConvertHexStringToByteArray(search);
|
||||||
for (var i = startByte; i >= 0; i--)
|
for (var i = startByte; i >= 0; i--)
|
||||||
{
|
{
|
||||||
var ramblock = new StringBuilder();
|
bool differenceFound = false;
|
||||||
for (var j = 0; j < numByte; j++)
|
for (var j = 0; j < numByte; j++)
|
||||||
{
|
{
|
||||||
ramblock.Append(string.Format("{0:X2}", (int)_domain.PeekByte(i + j)));
|
if (_domain.PeekByte(i + j) != searchBytes[j]) {
|
||||||
|
differenceFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var block = ramblock.ToString().ToUpper();
|
if (!differenceFound)
|
||||||
if (search == block)
|
|
||||||
{
|
{
|
||||||
found = i;
|
found = i;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue