替换文件中的十六进制字符串
本文关键字:十六进制 字符串 文件 替换 | 更新日期: 2023-09-27 18:26:39
我的头撞了它几个小时后,我不知所措。我在一个文件中有一个十六进制字符串,它是"68 39 30 00 00"。"39 30"是我想要替换的十进制值"12345","68"answers"00 00"只是为了确保有一个匹配。
我想传入一个新的十进制值,如"12346",并替换文件中的现有值。我试过在十六进制、字节数组等之间来回转换所有内容,觉得它必须比我想象的要简单得多。
static void Main(string[] args)
{
// Original Byte string to find and Replace "12345"
byte[] original = new byte[] { 68, 39, 30, 00, 00 };
int newPort = Convert.ToInt32("12346");
string hexValue = newPort.ToString("X2");
byte[] byteValue = StringToByteArray(hexValue);
// Build Byte Array of the port to replace with. Starts with /x68 and ends with /x00/x00
byte[] preByte = new byte[] { byte.Parse("68", System.Globalization.NumberStyles.HexNumber) };
byte[] portByte = byteValue;
byte[] endByte = new byte[] { byte.Parse("00", System.Globalization.NumberStyles.HexNumber), byte.Parse("00", System.Globalization.NumberStyles.HexNumber) };
byte[] replace = new byte[preByte.Length + portByte.Length + endByte.Length];
preByte.CopyTo(replace, 0);
portByte.CopyTo(replace, preByte.Length);
endByte.CopyTo(replace, (preByte.Length + portByte.Length));
Patch("Server.exe", "Server1.exe", original, replace);
}
static private byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
3930的十进制值为14640,因此它将检查不存在的14640。
1234的十六进制值为3039。只要更正这些值,您的程序就会正常工作。