저는 C++ 초보자입니다. 나는 그것을 배워야 만하는 직장에서 새로운 프로젝트를 가졌으므로 나는 내 이해를 테스트하기 위해 몇 가지 일을 시도하고있다. 이 문제는 파일을 읽고 화면에 인쇄하려고합니다. 슈퍼 간단하고, 그냥 잘하려고하고 내가 사용하고있는 기능을 이해하려고. MS Word 문서의 일부 텍스트를 메모장 (* .txt) 파일로 복사했으며이 * .txt 파일을 읽으려고합니다. 단어 문서의 모든 텍스트는 굵게 표시되어 있지만 '특이한'문자는 없습니다. 굵은 글씨 "-"기호를 제외한 모든 내용이 화면에 인쇄됩니다. 이 문자는 모자 문자 ("확장 ASCII 코드"150)와 함께 "u"로 인쇄됩니다. 내 배열 (이 150되어야합니다)이 문자의 정수 값을 인쇄하려고하지만 -106 얻을. 이 부호가있는 정수는 부호없는 정수 150과 동일한 비트를가집니다. 제 질문은 출력을 150이라고하는 방법입니다. 여기에 내 코드입니다 :서명되지 않은 char *이 ifstream :: read와 함께 작동하지 않는 이유는 무엇입니까?
이This file is 80 bytes.
The first 57 characters of this file are:
STATUS REPORT
PERIOD 01 u 31 JUL 09
TASK 310: APPLIC
ASCII code for char in input1[24] is: 32
ASCII code for char in input1[25] is: -106
ASCII code for char in input1[26] is: 32
ASCII code for char in input1[25] as unsigned int: 4294967190
ASCII code for char in input1[25] as unsigned short int: 65430
ASCII code for char in input1[25] as short int: -106
그래서 서명으로 항상 읽기 "는이 int로"가 나타납니다 : 모든이에 대한
#include <iostream>
#include <fstream>
using namespace std;
int main() {
unsigned char* input1;
int input1size = 57;
ifstream file("hello_world2.txt",ios::binary | ios::ate);
if (file.is_open()){
int size;
size = (int) file.tellg();
cout <<"This file is " << size << " bytes." << endl;
file.seekg(0,ios::beg);
input1 = new unsigned char[input1size];
file.read(input1, input1size);
cout << "The first " << input1size <<" characters of this file are:" << endl<<endl;
for (int i=0; i<input1size; i++) {
cout << input1[i];
}
cout<<endl;
}
else {
cout <<"Unable to open file" << endl;
int paus;
cin>>paus;
return 0;
}
file.close();
int charcheck = 25;
int a=0;
int a1=0;
int a2=0;
unsigned int a3=0;
unsigned short int a4=0;
short int a5=0;
a = input1[charcheck];
a1 = input1[charcheck-1];
a2 = input1[charcheck+1];
a3 = input1[charcheck];
a4 = input1[charcheck];
a5 = input1[charcheck];
cout <<endl<<"ASCII code for char in input1[" << charcheck-1 <<"] is: " << a1 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] is: " << a << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck+1 <<"] is: " << a2 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as unsigned int: " << a3 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as unsigned short int: " << a4 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as short int: " << a5 << endl;
int paus;
cin>>paus;
return 0;
}
출력하는 것 같습니다. "a"를 부호없는 상태로 만들려고하면 char의 8 비트 중 1 비트를 남겨 둡니다. 왜 이런거야? 질문의 길이는 유감스럽게 생각합니다. 단지 자세하게 설명하려고합니다. 감사!
그래서 부호없는 값 150을 출력하는 방법이 있습니까? 포인터 input1을 "unsigned char * input1;"으로 선언하려고하면 (원래 게시물의 코드에 게시 된 것처럼), 오류가 발생했습니다. :: read '매개 변수 1을'unsigned char * '에서'char * '로 변환 할 수 없습니다. – Jade
예. 마스크를 사용하여 : a3 = input1 [charcheck] & 0xff;'확장 된 부호 하나를 제거하십시오. 그럼 당신의 시창은 150을 표시합니다. –
아, 고마워요! 나는이 시점에서 마스크에 대해 아무것도 모른다. 그러나 이제는 검색 할 방향이있다. 도와 줘서 고마워! – Jade