GameBoy 카트를 읽는 Arduino 프로그램을 작성했습니다. Java는 시작 문자를 보내고 바이트 읽기 및 보내기를 시작합니다. 16 진수 편집기 (또는 텍스트 편집기)에서 덤프 된 롬을 열면 언뜻보기에는 동일하지만 편집기에서 비교 기능을 사용하면 덤프 된 ROM의 모든 0x3F 문자가 올바르지 않다는 사실이 강조됩니다.내 Arduino 프로그램에있는 모든 기능은이 작업을 수행하기 전에 테스트를 마쳤으므로 내가 생각할 수있는 유일한 점은 자바 측을 테스트하는 것이 었습니다. 이것을 시험해보기 위해 간단히 10 진수 옆에 모든 아스키 문자 (0-255)를 연속으로 보내는 또 다른 간단한 Arduino 프로그램을 만들었습니다. 사실 6 개의 다른 표현이 있다는 것을 깨달았습니까?여섯 가지 '?' ASCII 문자?
다음59: ;
60: <
61: =
62: >
63: ? <
64: @
65: A
66: B
...
125: }
126: ~
127:
128: €
129: ? <
130: ‚
131: ƒ
132: „
...
140: Œ
141: ? <
142: Ž
143: ? <
144: ? <
145: ‘
146: ’
147: “
...
154: š
155: ›
156: œ
157: ? <
158: ž
159: Ÿ
160:
문제의 자바 코드 : 문자, 여기에 파일의 그 부분입니다
final Arduino board = new Arduino("COM5", 115200);
BufferedWriter rom = new BufferedWriter(new FileWriter("[ROM].gb"));
board.write((byte)0);
Thread.sleep(10000);
while (board.hasavailable() > 0) {
String data = new String(board.read(board.hasavailable()));
rom.write(data);
Thread.sleep(1000);
}
rom.flush();
rom.close();
나는이 의사 소통에 문제가되는 볼 수없는 전송 속도가 잘못 경우가하는 것처럼 쓰레기가 될 것입니다, 이것이 ASCII 형식의 UTF-8 같은 텍스트 형식의 문제라면 분명히 똑같이 될 것입니다 ... 기본적으로 Java는 '?' 그리고 항상 첫 번째 인스턴스라고 가정합니다. 바이트 []를 문자열로 캐스팅 할 때 뭔가 빠졌는데, 이는 이것이 내가하는 것처럼 명백한 문제라고 생각하기 때문입니다.
편집 1 : 나는 모든 문자가 동일하게 얻을 수있는 referance에로 asciitable.com을 사용하고있다
.
byte[] data = board.read(readsize);
for (byte in : data)
rom.write(in);
확장 세트의 모든
은 (128+)이 될의 '?': 나는 또한 내가 여기에 코드를 작성 파일을 변경하면 것을 발견했다. 그것은 bufferedWriter에 문제가 될 수 있습니까?편집 2 : 재현 예를 들어 여기에
은 내가 사용하고있는 아두 이노와 자바 코드입니다.
자바 쓴 후 파일이 16 진수 편집기에서이를 확인하고 위에서 언급 한 문자가 모두 0x3F입니다로 변경 한 것을 알 수 있습니다.
어디에서 문자를 인쇄하고 있습니까? 어쩌면 그 장치는 그 문자들을 출력 할 수없고'? '를 디폴트 출력으로 사용할 수 있습니다. –
또한 [여기] (http://www.asciitable.com/)는 ASCII 및 확장 ASCII 테이블입니다. –
@SotiriosDelimanolis 결국 나는 그 바이트가 실제로 '?'의 다른 값 대신에 0x3F라고 말했 읍니다. 그리고 저는 그 페이지를 반복해서보고있었습니다. Java가 사실상 잘못된 문자를 가정합니다. –