06
Aug.2008
作者:Aleaf
最近因为编程对二进制文件的读写,需要遍历所有字节,有把文件字节码转为文本进行操作的想法(即对16进制代码的可视化编辑,如UltraEdit等)。一直都担心速度问题而没有去尝试。在网上搜索了一下相关的内容,据说以下是把文件字节的16进制代码转换成字符串的比较快速的方法。
大概步骤是:
将整个文件读成字节数组(对数组操作速度肯定比文件操作要快);
然后逐字节(数组每一元素)转换成表示16进制的字符串(这里用位运算,如果用系统函数那简直就是恶梦);
最后以返回合并后的字符串(不知文件太大了转换的字符串会不会影响操作?)。
static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static string ToHexString(byte[] bytes)
{
char[] chars = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++)
{
int b = bytes[i];
chars[i * 2] = hexDigits[b >> 4];
chars[i * 2 + 1] = hexDigits[b & 0xF];
}
return new string(chars);
}