преобразовать массив long long в строку - PullRequest
0 голосов
/ 28 января 2019

В c ++ у меня есть массив long long со знаком (63-битные числа), массив переменной длины.

std::array<long long, n> encodedString

Этот массив фактически содержит строку в кодировке UTF-8.Это означает, что если вы объедините двоичные файлы каждого элемента массива, результатом будет текст в кодировке UTF-8.

Например, массив:

(621878499550 , 2339461068677718049) 

Если вы переводите эти подписанныедолго долго 63 двоичное это дает:

621878499550 = 000000000000000000000001001000011001010110110001101100011011110

2339461068677718049 = 010000001110111011011110111001001101100011001000010000000100001

Если вы сцепить эти двоичные файлы в: 000000000000000000000001001000011001010110110001101100011011110010000001110111011011110111001001101100011001000010000000100001

ЭтоUTF8 для «Hello world!»

Итак, вопрос в том, какой самый простой способ получить строку с «Hello world!»начиная с массива (621878499550, 2339461068677718049)

Лучшее решение, которое у меня сейчас есть, - записать массив в файл в двоичном режиме (fwrite), а затем прочитать файл в текстовом режиме в строку.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Использование набора битов для преобразования длинного длинного в двоичный и строковый поток для их потоковой передачи

#include <sstream>
#include <iostream>
#include <bitset>
#include <array>

int main() 
{
    std::array<long long, 2> array = { 621878499550 , 2339461068677718049ll };
    std::stringstream ss;

    for (auto& n : array)
    {
        ss << std::bitset<64>(n);
    }

    std::cout << ss.str() << std::endl;
}

, который выдает 0000000000000000000000010010000110010101101100011011000110111100010000001110111011011110111001001101100011001000010000000100001

0 голосов
/ 28 января 2019

Попробуйте это

// 48 & 56 were to avoid the extra padding made when you use 64 bitset but i think thats what you are looking for 
std::string binary = std::bitset<48>(114784820031264).to_string();
std::string binary2 = std::bitset<56>(2339461068677718049).to_string();
binary += binary2;
std::stringstream sstream(binary);
std::string output;
while (sstream.good())
{
    std::bitset<8> bits;
    sstream >> bits;
    output +=char(bits.to_ulong());

}

std::cout << output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...