문제

이 시점에서 대부분의 사람들은 "아 ill 게시물 .. :"라고 생각할 것입니다.

byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);

그러나 제가 가진 문제는 각 바이트의 순수한 값 만 인코딩하지 않고 바이트의 정확한 값이 필요하다는 것입니다. 예를 들어 문자열의 값이 (0xff32) 인 경우 {255,50}도 변환하기를 원합니다. 그는 이것에 대한 이유는 int를 바이트로 저장하는 내용을 읽으려고 시도하는 파일 형식을 가지고 있기 때문입니다. 그런 다음 프로그램이 열릴 때 읽습니다.

이것이 내가 지금까지 가지고있는 것입니다.

...
dialog.InitialDirectory =
    Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) +
    "/Test";

dialog.Title="Open File";

if (dialog.ShowDialog(this) == DialogResult.OK)
{
    StreamReader reader = new StreamReader(dialog.FileName);
    string data = reader.ReadToEnd();
    reader.Close();
    byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data);
    File_Read(dialog.FileName,fileC);
}
...

따라서 파일을 읽으려고 할 때 0xff가 127 및 0x3f보다 크기 때문에 Say 0xff의 파일 규칙을 0x3f로 변환합니다.

조금 혼란스러워 보이면 미안 해요 :)

고마워요, 마이클

도움이 되었습니까?

해결책

문제는 다음과 같은 접근 방식에 관한 것입니다.

인코딩없이 바이트의 정확한 값이 필요합니다.

...

예를 들어 문자열 값이 (0xff32) 인 경우

그것은 유화를보고 "나는 인코딩없이 그 그림의 바이트를 원한다"고 말하는 것과 비슷합니다. 말이되지 않습니다. 텍스트는 이진 데이터와 다릅니다. 당신이 그것을 이해하면, 문제의 근본에 도달하기가 쉽습니다. 당신이 정말로 원하는 것은 a의 내용입니다 파일 바이트 배열로. 파일은 이진 데이터이기 때문에 쉽습니다! 실제로 텍스트가 아니라면 처음에는 텍스트로 읽어서는 안됩니다. 다행히 .net은 이것을 정말 쉽게 만듭니다.

byte[] fileC = File.ReadAllBytes(dialog.FileName);

다른 팁

그러나 제가 가진 문제는 각 바이트의 순수한 값 만 인코딩하지 않고 바이트의 정확한 값이 필요하다는 것입니다.

그런 다음 이것을 사용하십시오 :

byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);

.NET 문자열에 의해 내부적으로 저장된대로 바이트를 반환합니다.

그러나이 모든 것은 codswallop입니다. 문자열은입니다 언제나 특정 인코딩과 연결되어 있으며 그 주위에는 방법이 없습니다. 파일에 유효하지 않은 유니 코드 코드 시퀀스 (발생할 수 있음)가 포함되어 있거나 정규화를 통해 위의 내용이 실패합니다. 당신은 분명히하지 않기 때문에 원하다string, 하나를 읽지 마십시오. 대신 파일을 이진 데이터로 읽으십시오.

// 문자열을 바이트 배열로 변환합니다

public static byte[] StrToByteArray(string str)
{
    System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
    return encoding.GetBytes(str);
}

// 바이트 배열을 문자열로 변환합니다

public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}

왜 문자열에서 변환합니까? 파일의 내용을 바이트로 직접 읽을 수 없습니까?

byte[] fileC = File.ReadAllBytes(dialog.FileName);

바이트를 원한다면 스트림을 사용하십시오!

왜 지구상에서 당신은 텍스트 트레드를 엉망으로 만들고 있습니까?

편집하다:

예제에 따라 파일을 열므로 Filestream 만 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top