파일에 바이트 쓰기
16 진수 문자열 (예 :) 0CFE9E69271557822FE715A8B3E564BE
이 있고 파일에 바이트로 쓰고 싶습니다. 예를 들면
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¾
.NET 및 C #을 사용하여 어떻게이 작업을 수행 할 수 있습니까?
내가 당신을 올바르게 이해한다면, 이것이 트릭을 할 것입니다. using System.IO
아직 파일이없는 경우 파일 상단에 추가 해야합니다.
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;
}
}
가장 간단한 방법은 16 진수 문자열을 바이트 배열로 변환하고 File.WriteAllBytes
메서드를 사용하는 것입니다.
이 질문 의 StringToByteArray()
방법을 사용하면 다음과 같이 할 수 있습니다.
string hexString = "0CFE9E69271557822FE715A8B3E564BE";
File.WriteAllBytes("output.dat", StringToByteArray(hexString));
StringToByteArray
방법은 아래에 포함된다 :
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();
}
이 시도:
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();
}
16 진 문자열을 바이트 배열로 변환합니다.
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();
}
크레딧 : Jared Par
그런 다음 WriteAllBytes 를 사용 하여 파일 시스템에 씁니다.
This example reads 6 bytes into a byte array and writes it to another byte array. It does an XOR operation with the bytes so that the result written to the file is the same as the original starting values. The file is always 6 bytes in size, since it writes at position 0.
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
byte[] b1 = { 1, 2, 4, 8, 16, 32 };
byte[] b2 = new byte[6];
byte[] b3 = new byte[6];
byte[] b4 = new byte[6];
FileStream f1;
f1 = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
// write the byte array into a new file
f1.Write(b1, 0, 6);
f1.Close();
// read the byte array
f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
f1.Read(b2, 0, 6);
f1.Close();
// make changes to the byte array
for (int i = 1; i < b2.Length; i++)
{
b2[i] = (byte)(b2[i] ^ (byte)10); //xor 10
}
f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Write);
// write the new byte array into the file
f1.Write(b2, 0, 6);
f1.Close();
f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
// read the byte array
f1.Read(b3, 0, 6);
f1.Close();
// make changes to the byte array
for (int i = 1; i < b3.Length; i++)
{
b4[i] = (byte)(b3[i] ^ (byte)10); //xor 10
}
f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Write);
// b4 will have the same values as b1
f1.Write(b4, 0, 6);
f1.Close();
}
}
}
참고URL : https://stackoverflow.com/questions/6397235/write-bytes-to-file
'code' 카테고리의 다른 글
Perl에서 문자열을 숫자로 어떻게 변환 할 수 있습니까? (0) | 2020.10.04 |
---|---|
Gmail과 같은 여러 확인란을 Shift- 선택하려면 어떻게합니까? (0) | 2020.10.04 |
Spring에서 @Value의 기본값으로 null을 설정할 수 있습니까? (0) | 2020.10.04 |
iReport가 JRE 8을 사용하여 시작되지 않음 (0) | 2020.10.04 |
java.util.Date에서 XMLGregorianCalendar로 (0) | 2020.10.03 |