2016-10-07 16 views
-4

Javas .getBytes()メソッドに相当するC++があるかどうか疑問に思います。私は.txtファイルを読み込み、各行をバイトに変換する必要があります。文字列をバイト配列に変換する

ありがとうございます!

+1

C++コードを投稿して、必要なものを教えてください:16進数のバイト、それ以外のもの? –

+1

これを確認してください:http://stackoverflow.com/questions/505021/get-bytes-from-stdstring-in-c –

答えて

0

C++の場合、charは1バイトです。したがって、std::stringはすでにバイト列です。

ただし、unsigned charのシーケンスが必要な場合があります。

1つの方法は、文字列からバイト値をコピーすることです。 std::vectorへ:

using Byte = unsigned char; 
vector<Byte> const bytes(s.begin(), s.end()); 

あなたは行ごとにstd::wstring、例えばにテキストファイルを読んでいる場合幅の広いストリームを使用すると、バイトは、その文字列の優先エンコードに依存します。

実際には、おそらくIBMメインフレームを除いて、C++ワイド文字列はUTF-16またはUTF-32でエンコードされています。これらの2つのエンコーディングの場合、標準ライブラリはUTF-8との間で変換できるspecializations of std::codecvtを提供します。


あなたはワイド文字列から任意のコード化をしたい場合は、申し訳ありません、限りC++標準ライブラリに関しては運の出ています。

+0

Java java.lang.Stringは、std :: stringのような文字の配列もラップします。その点で違いはありません。 –

+0

@SeanF:Javaの 'String'は内部的にUTF-16としてエンコードされたUnicodeです。 C++の 'std :: string'は一連のバイトです。それは非常に大きな違いです。 –

+0

@乾杯と乾杯。 C++では、好きなように文字列をエンコードすることができます。 UTF-16 std :: stringが必要な場合は、何も停止しません。 –

0

std :: string :: dataは同等です。

+0

Javaの '.getBytes()'が未処理のポインタを生成していますか?それは何ですか? –

+0

Javaにはポインタがありません。 getBytesはstd :: string :: dataのように文字配列に直接アクセスできるだけで、どちらの場合でもバイト配列を見ています。どちらの言語でも、元の文字列オブジェクトではなく、これらの配列を使用することをお勧めします。 –

+0

Javaにはポインタがいっぱいです。そのため、Javaに関する質問に答えるために慣れ親しんでおくべきJava言語仕様がポインタと呼ばれています。しかし、Javaには未処理のポインタはありません。これは私のここでのポイントです: 'std :: string :: data'はJavaのものと同等であり、無意味です。 –

関連する問題