2017-06-09 104 views
0

我想分析一個藍牙低功耗廣告中包含的數據,這是我的代碼到目前爲止。我找不到如何從IBuffer中提取數據,最好是字節數組。如果有更好的方法來提取數據,或者任何人知道如何將IBuffer轉換爲字節數組,那麼您的幫助將不勝感激。提取藍牙低功耗廣告數據在c + +

此外,我沒有辦法檢查我的代碼到目前爲止是否正確,所以如果有任何錯誤,請隨時讓我知道。

+0

這有助於:https://stackoverflow.com/questions/11853838/getting-an-array-of-bytes-out-of-windowsstoragestreamsibuffer –

回答

0

我找到了答案。大多數情況下,這只是一堆comptrs,其他人用來轉換緩衝區的額外投射在這裏是不必要的,因爲緩衝區已經是一個comptr對象。

HRESULT BLEWatcher::OnAdvertisementReceived(IBluetoothLEAdvertisementWatcher* watcher, IBluetoothLEAdvertisementReceivedEventArgs* args) 
{ 


    ComPtr<IBluetoothLEAdvertisement> advertisement; 
    args->get_Advertisement(&advertisement); 
    ComPtr<__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection> dataSections; 
    advertisement->get_DataSections(&dataSections); 
    ComPtr<IBluetoothLEAdvertisementDataSection> dataSection; 
    //Get appropriate data section 
    dataSections->GetAt(2, &dataSection); 
    ComPtr<IBuffer> buffer; 
    dataSection->get_Data(&buffer); 
    ComPtr<IBufferByteAccess> bufferByteAccess; 
    buffer.As(&bufferByteAccess); 
    byte* bytes = nullptr; 
    bufferByteAccess->Buffer(&bytes); 

    //Handle bytes here 

    return S_OK; 
}