我正在编写c ++代码以将ebcdic转换为ascii
我的主要()如下所示
int main()
{
char text[100];
int position;
int count;
printf("Enter some text\n");
cin >> text;
char substring[] = "\\x";
if(strlen(text) 2 != 0)
{
cout << "Length of the string is not even" << endl;
}
else
{
position = 1;
int len_string;
len_string = strlen(text)/2;
cout<<"len_string"<<len_string<<endl;
for (count = 0; count < len_string;count++)
{
insert_substring(text, substring, position);
printf("text is s\n",text);
position = position + 4;
}
}
ebcdicToAscii((unsigned char*)text);
cout << "Converted text" <<text << endl;
char str[]="\xF5\x40\x40\x40\x40\xD4"; //Hardcoded string
ebcdicToAscii((unsigned char*)str);
printf ("converted str is s\n", str);
return 0;
}
Enter some text
F54040404040D4
len_string7
text is \xF54040404040D4
text is \xF5\x4040404040D4
text is \xF5\x40\x40404040D4
text is \xF5\x40\x40\x404040D4
text is \xF5\x40\x40\x40\x4040D4
text is \xF5\x40\x40\x40\x40\x40D4
text is \xF5\x40\x40\x40\x40\x40\xD4
Converted text**?*?*?*?*?*
converted str is 5 M
在转换之前,我需要附加\ x infront of string
F540404040D4
必须插入转义序列\ x
我写了逻辑,所以得到了输出:
\xF5\x40\x40/x40\x40\xD4
现在使用
开始将ebcdic转换为asciiebcdicToAscii((unsigned char*)text);
但我没有得到理想的输出。
在我将字符串硬编码为
的同时\xF5\x40\x40/x40\x40\xD4
输出符合预期
即 5 M
我很困惑。请指导我。我没有在代码中显示调用函数,假设它正在给出正确的返回。
答案 0 :(得分:1)
你不要在输入的字符串中插入\x
,顺便插入或不插入,这是行不通的。
下面:
char str[]="\xF5\x40\x40\x40\x40\xD4";
这只是指示,例如F5
是十六进制数字,应使用此ascii代码(不仅仅是符号F和5)。
点击此处了解更多信息:What does \x mean in c/c++?
你应该从你的输入构造一个字符串,它将存储,而不仅仅是符号,但是每个字节使用ascii代码。
对于转换,您可以使用以下代码:
#include <iostream>
#include <string>
int main()
{
const std::string s ="F540404040D4";
std::string converted;
converted.reserve(s.size() / 2);
for (size_t i = 0; i < s.size(); i += 2)
{
const std::string tmp = s.substr(i, 2);
const int a = std::strtol(tmp.c_str(), 0, 16);
converted += static_cast<char>(a);
}
std::cout << converted.size() << std::endl;
}