c# - modificar - Escribir bytes en el archivo
leer archivo stream c# (4)
Tengo una cadena hexadecimal (por ejemplo, 0CFE9E69271557822FE715A8B3E564BE
) y quiero escribirla en un archivo como bytes. Por ejemplo,
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 0C FE 9E 69 27 15 57 82 2F E7 15 A8 B3 E5 64 BE .þži''.W‚/ç.¨³åd¾
¿Cómo puedo lograr esto usando .NET y C #?
La forma más simple sería convertir su cadena hexadecimal a una matriz de bytes y usar el método File.WriteAllBytes
.
Usando el método StringToByteArray()
partir de esta pregunta , harías algo como esto:
string hexString = "0CFE9E69271557822FE715A8B3E564BE";
File.WriteAllBytes("output.dat", StringToByteArray(hexString));
El método StringToByteArray
se incluye a continuación:
public static 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();
}
Si te entiendo correctamente, esto debería hacer el truco. Necesitará agregar using System.IO
en la parte superior de su archivo si aún no lo tiene.
public bool ByteArrayToFile(string fileName, byte[] byteArray)
{
try
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
fs.Write(byteArray, 0, byteArray.Length);
return true;
}
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in process: {0}", ex);
return false;
}
}
Usted convierte la cadena hexadecimal en una matriz de bytes.
public static 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();
}
Crédito: Jared Par
Y luego use File.WriteAllBytes para escribir en el sistema de archivos.
private byte[] Hex2Bin(string hex) {
if ((hex == null) || (hex.Length < 1)) {
return new byte[0];
}
int num = hex.Length / 2;
byte[] buffer = new byte[num];
num *= 2;
for (int i = 0; i < num; i++) {
int num3 = int.Parse(hex.Substring(i, 2), NumberStyles.HexNumber);
buffer[i / 2] = (byte)num3;
i++;
}
return buffer;
}
private string Bin2Hex(byte[] binary) {
StringBuilder builder = new StringBuilder();
foreach (byte num in binary) {
if (num > 15) {
builder.AppendFormat("{0:X}", num);
} else {
builder.AppendFormat("0{0:X}", num);/////// 大于 15 就多加个 0
}
}
return builder.ToString();
}