2017-04-08 29 views
3

C言語でstd::byteが注目されました。C++のstd :: byteはC#のbyteと同等ですか?

私は以下のコードを使用してオーディオを再生するためにバイト配列をC++に送信するため、この質問をしています。

C#の

[DllImport ("AudioStreamer")] 
public static extern void playSound (byte[] audioBytes); 

C++:C++ 17の新byteタイプでは

#define EXPORT_API __declspec(dllexport) 
extern "C" void EXPORT_API playSound(unsigned char* audioBytes) 

は、それは私がこれを行うことができるかもしれないように見えますnow:

C#の

[DllImport ("AudioStreamer")] 
public static extern void playSound (byte[] audioBytes); 

C++

#define EXPORT_API __declspec(dllexport) 
extern "C" void EXPORT_API playSound(byte[] audioBytes) 

私が使用コンパイラはまだC++ 17でbyteをサポートしていないので、これはも動作するかどうかわかりません。

したがって、C++のstd::byteは、byteに相当します。 std::byteunsigned char*以上に使用しない理由はありますか?

+0

価値がありますhttp://stackoverflow.com/questions/43143318/stdbyte-on-odd-platformsそれは奇妙なプラットフォームから始まりますが、答えはすべての基本をカバーしています。 –

+0

C#**は**バイトが正確に8ビットであることが必要ですが、C++とC#を連動させる場合、C++も8ビットバイトを使用していると考えることができます – MSalters

答えて

1

According to C++ referencestd::byteは、他のオブジェクトによって占有生メモリにアクセスするために使用可能な文字の種類(文字、unsigned char型、signed char型)のような

これは、あなたがバイトとしてバイトを処理するために計画することをあなたが自由に

unsigned char audioBytes[] 

機能ヘッダー内の

std::byte audioBytes[] 

で置き換えることができ、すべてが提供さ、仕事に行くされていることを私に伝えます数値オブジェクトとしてではありません。

+0

コンパイラをCおよびC++との相互運用性のために 'std :: byte 'を使用することの問題は、かなりの時間、純粋に理論的なトピックのままです。 – dasblinkenlight

+0

私はバイトをバイトとして扱い、これは有望だと思います。私は自分のコードを修正し、バイトをサポートしているGCCコンパイラでこれをテストし、今日あなたをアップデートするように最善を尽くします。 – Programmer

1

std::byteは、1バイトの生メモリを表すタイプであるという意味で、C++のunsigned charcharの両方に相当します。

インターフェイスにunsigned char*を使用した場合は、std::byteに簡単に置き換えることができます。

C#コードでは、これは全く変更されません。これはC++側では、あなたのタイプシステムをより厳密にします(これは良いことです)。std::byte sをテキスト文字または小さな整数として扱います。

もちろん、これはC++ 17の機能であり、コンパイラによって適切にサポートされている場合とそうでない場合があります。

関連する問題