C++で文字列をバイトアレイに変換する
この投稿では、C++で文字列をバイトアレイに変換する方法について説明します。
C++ 11以降、 std::byte
実際のバイトデータを表します。この投稿は、変換するためのいくつかのもっともらしいオプションの概要を提供します std::string
に std::byte
アレイ。
1.使用する std::memcpy
を使用してアレイのバイナリコピーを実行するための一般的なソリューション std::memcpy
関数。文字列をバイトアレイに変換するために使用できます std::string::data
関数。文字列オブジェクトのC文字列表現を含むアレイへのポインタを返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <cstddef> #include <cstring> int main() { std::string s = "C++"; std::byte bytes[s.length()]; std::memcpy(bytes, s.data(), s.length()); for (auto &b: bytes) { std::cout << std::to_integer<int>(b) << ' '; } return 0; } |
出力:
67 43 43
2.使用する std::transform
別の代替手段は、 std::transform
関数。指定された範囲要素のそれぞれに指定された操作を適用し、結果を別の範囲に格納します。これは、以下を使用して示されています std::byte
コンストラクタ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include <cstddef> #include <algorithm> #include <vector> int main() { std::string s = "C++"; std::array<std::byte, 3> bytes; std::transform(std::begin(s), std::end(s), std::begin(bytes), [](char c) { return std::byte(c); }); for (auto &b: bytes) { std::cout << std::to_integer<int>(b) << ' '; } return 0; } |
出力:
67 43 43
この関数の動作は、実質的に次と同等です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include <cstddef> #include <cstring> #include <algorithm> int main() { std::string s = "C++"; std::byte bytes[s.size()]; for (size_t i = 0; i < s.size(); i++) { bytes[i] = std::byte(s[i]); } for (auto &b: bytes) { std::cout << std::to_integer<int>(b) << ' '; } return 0; } |
出力:
67 43 43
これで、C++で文字列をバイトアレイに変換できます。