2015-08-17 7 views
0

В C++, как вы преобразовываете строку ASCII (не более 5 элементов) в строку значений ASCII или длинную, как показано ниже?Как преобразовать строку в длинную или другую строку значений ascii?

str = "ABCDE"; --> ascii_value_str = "6566676869"; 

или

str = "ABCDE"; --> long_int = 6566676869; 
+0

C или C++, выберите один. Эти два языка разные. – fuz

+1

Ваша спецификация не совсем лаконична. Вам нужно преобразовать значения строки и int обратно в исходное значение строки? Если это так, вам нужно разделить результат. Самое простое решение - использовать шестнадцатеричную систему цифр для вашей строки. И для значения int сдвиньте результат, оставшийся на 8 бит для каждого добавленного нового символа. – IInspectable

ответ

1

Вы можете просто взять каждый персонаж и бросить его в целом:

int aval = (int) str[i]; 

Теперь вы можете превратить его в длинном через основное умножение или использовать функцию to_string превратить его в строку.

+0

спасибо, получилось. – Allanqunzi

+0

, но убедитесь, что 'str' правильно выровнен, или он будет генерировать segfault. На архитектурах, которые допускают неравномерный доступ, он также медленнее обычного доступа. –

+1

Обратите внимание, что 'int' обычно имеет длину всего 4 байта, поэтому он не может хранить 5-байтовые значения, подобные этому. Еще одна вещь, которую нужно ухаживать - это утверждение. Прямое преобразование в строку через int будет работать только в том случае, если архитектура имеет большой конец –

2

Loop через строку "ABCDE" и преобразовать каждый элемент в его ASCII и добавить в строку ascii_value_str с помощью std::to_string

for(const auto& ch: str) 
{ 
    ascii_value_str += std::to_string((int) ch ); 
} 

Для преобразования в вашей long_int, просто используйте std::atol

long int long_int = std::atol(ascii_value_str .c_str()); 
1

Было бы легко кодировать, если вы используете c++11, потому что функция to_string() доступна для c++11 и далее. Теперь все, что вам нужно сделать, это играть со своими значениями ASCII.

Посмотрите на фрагменты кода:

1 Преобразование строки в значение ASCII строки

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", output; 

    for(int i=0; i<str.length(); i++) { 
     output += to_string((int)str[i]); 
    } 

    cout<< output << endl; 
    return 0; 
} 

2 Преобразование строки в значение ASCII длинной междунар, но возражаю диапазон длинных междунар. Вы можете получить неправильный ответ на длинная строка ввода, и теперь код есть.

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string str = "xyz"; 
    long int output = 0; 

    for(int i=0; i<str.length(); i++) { 
     if(str[i]/100) {  // three digit ASCII Value 
      output = 1000*output + str[i]; 
     } else if(str[i]/10) { // two digit ASCII Value 
      output = 100*output + str[i]; 
     } else {    // one digit ASCII Value 
      output = 10*output + str[i]; 
     } 

    } 

    cout<< output << endl; 
    return 0; 
} 
+1

Значения ASCII находятся в диапазоне 0 .. 127. Ваше умножение на 100 является ошибкой. Вместо этого используйте оператор с левым сдвигом: 'output = (output << 8) + str [i];'. – IInspectable

Смежные вопросы