当我尝试将字符串从从文件读取的字符串转换为int时,为什么会得到负值?
fin.getline(text, 512);
fin.close();
someInt = (int)text[0]; // It happens to be the random value and always negative.
整个代码:
问题本身在Decrypt函数中。 当我从文件中读取字符串,并将字符串中的字符转换为int时,即使字符相同,我也会得到负值,总是随机的。
// WUEncryptor.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void Encrypt(string filePath, string password = "");
void Decrypt(string filePath, string password = "");
int main(int argc, char** argv)
{
int mode = 0;
string filePath;
if (argc > 2) {
mode = atoi(argv[1]);
filePath = argv[2];
/** Checking which mode to use */
switch (mode) {
case 0:
if (argc > 3)
Encrypt(filePath, argv[3]);
else
Encrypt(filePath);
break;
case 1:
if (argc > 3)
Decrypt(filePath, argv[2]);
else
Decrypt(filePath);
break;
default:
return 0;
}
}
else {
/** If something was entered wrong by user, print the error message and quit */
cout << "Invalid launch..\nYou should use arguments\nFor example: \"WUEncryptor 0 EncryptedFile\n";
}
return 0;
}
/** Encrypting function */
void Encrypt(string filePath, string password) {
string text;
string pass = password;
/** Quit if pass word isn't determined */
if (pass == "") {
cout << "Use \"WUEncryptor 0/1 \"filepath\" password\n";
return;
}
cout << "Enter the message which is going to be encrypted\n";
char tempstr[512];
gets_s(tempstr);
text = tempstr;
/** Loop that replaces characters in the text */
for (int i = 0, m = 0, temp = 0; i < text.length(); i++) {
temp = (int)text[i] + (int)pass[m];
cout << temp;
if (temp > 255)
temp -= 256;
cout << temp;
text[i] = (char)temp;
/** Looping the pass code */
if (m >= pass.length() - 1)
m = 0;
else
m++;
cout << "Encrypting " << i << " of " << text.length() << "...\n";
}
cout << "Successfully encrypted\nTEXT: " << text << '\n';
ofstream fout;
try {
filePath += ".encrypted";
cout << "Creating the file...\n";
fout.open(filePath, ios_base::trunc);
cout << "Writing to file...\n";
fout << text;
fout.close();
cout << "We're all set!\n";
system("pause");
}
catch (exception) {
cout << "Something went wrong";
}
}
/** Decrypting function */
void Decrypt(string filePath, string password) {
string text, pass;
pass = password;
ifstream fin;
/** Quit if pass word isn't determined */
if (pass == "") {
cout << "Use \"WUEncryptor 0/1 \"filepath\" password\n";
return;
}
string openPath = filePath + ".encrypted";
char tempstr[512];
try {
fin.open(openPath);
fin.getline(&tempstr[0], 512);
fin.close();
text = tempstr;
//cout << (int)text[1];
for (int i = 0, m = 0, temp = 0; i < text.length(); i++) {
temp = (int)text[i] - (int)pass[m];
cout << temp;
if (temp < 0)
temp += 256;
cout << temp;
text[i] = (char)temp;
/** Looping the pass code */
if (m >= pass.length() - 1)
m = 0;
else
m++;
cout << "Decrypting " << i << " of " << text.length() << "...\n";
}
cout << "Successfully decrypted\nTEXT: " << text << '\n';
}
catch (exception) {}
ofstream fout;
try {
string savePath = filePath + ".txt";
cout << "Creating the file...\n";
fout.open(savePath, ios_base::trunc);
cout << "Writing to file...\n";
fout << text;
fout.close();
cout << "We're all set!\n";
system("pause");
}
catch (exception) {
cout << "Something went wrong";
}
}
有人清楚我的想法:D
答案 0 :(得分:-2)
您可能使用<ChapterHeader>
<Text> I need to get the text here</Text>
</ChapterHeader>
<Blank>
<Not>
</Not>
</Blank>
作为char*
的数据类型。
请注意,text
已签名,因此如果您(认为您)的值为例如char
那里,它真的是200
,所以如果你把它转换为-72
,你会得到int
:)