IBufferとbyteを相互変換するには

IBuffer

WindowsRuntimeでストリームの読み書きをするときはIBufferインターフェースを実装したクラスへとデータを変換する必要があります。

WindowsRuntimeBufferExtensionsクラスの拡張メソッドを使用する

下にDataWriterとDataReaderによる方法を書いてますがもっと簡単な拡張メソッドが

System.Runtime.InteropServices.WindowsRuntime

名前空間にありました。

 

AsBufferメソッドで変換できます

string data="abcd";
byte[] bytes = Encoding.GetEncoding("ASCII").GetBytes(data);

IBuffer buffer = bytes.AsBuffer();

 

 

byte→IBuffer

byteからIBufferに変換するにはDataWriterを使います。

usingでDataWriterのDisposeをします。

byte[] writeBytes=//何かしらのデータ

IBuffer buffer=null;
using (DataWriter writer = new DataWriter())
{
    writer.WriteBytes(writeBytes);
    buffer = writer.DetachBuffer();
}

 

IBuffer→byte

IBufferからbyteに変換するにはDataReaderを使います。

IBuffer buffer=//なにかしらのIBufferデータ

byte[] readBytes = new byte[buffer.Length];
using (DataReader reader = DataReader.FromBuffer(buffer))
{   
    reader.ReadBytes(readBytes);
}

 

stringをIBufferに相互変換するサンプルコード

string str="こんにちは";
byte[] writeBytes=Encoding.UTF8.GetBytes(str.ToCharArray());

IBuffer buffer=null;
using (DataWriter writer = new DataWriter())
{
    writer.WriteBytes(writeBytes);
    buffer = writer.DetachBuffer();
}


byte[] readBytes = new byte[buffer.Length];
using (DataReader reader = DataReader.FromBuffer(buffer))
{   
    reader.ReadBytes(readBytes);
}

string resultStr = Encoding.UTF8.GetString(readBytes, 0, readBytes.Length);

Debug.WriteLine(resultStr);

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.