[英]how to convert IEnumerable<string> to byte[] in c#?
[英]How to access IEnumerable<byte> in C++/CLI
我在C#中定義了這樣的接口:
public interface ISender
{
ReponseType SendData(PacketType packet);
}
PacketType
看起來像這樣(C#):
public struct PacketType
{
public IEnumerable<byte> PartOne;
public IEnumerable<byte> PartTwo;
}
我想用C ++編寫此接口的一種實現(因為C ++庫中提供了一種協議實現,並且在C ++中在托管代碼和非托管代碼之間跳轉非常容易)。 我創建了一個ref class
並實現了足夠的必需方法來進行編譯,鏈接和調試:
ResponseType MySender::SendData(PacketType packet)
{
return ResponseType::Failure;
}
現在,我堅持將IEnumerable
s轉換為uint8_t *
,並獲取它們的長度。 根據IntelliSense,它們的類型為System::Collections::Generic::IEnumerable<unsigned char> ^
,並且它們都沒有附加任何公共方法。
這看起來應該很明顯,所以我覺得我一定錯過了一些明顯的東西。
您需要先將IEnumerable轉換為托管數組,然后再將托管數組轉換為本地數組。
由於ToArray是擴展方法,因此在C ++ / CLI中,您可以將其稱為靜態函數:
array<unsigned char>^ a = Enumerable::ToArray<unsigned char>(PartOne);
關於如何將數據從托管陣列復制到本機陣列,您可以在此處找到操作方法。
不知道為什么Intellisense無法正常工作,但是您應該有一些可用的公共方法( GetEnumerator
和從object
繼承的方法)。 您不會看到擴展方法,但是應該可以從Enumerable
類中將它們作為靜態方法調用:
int partOneCount = Enumerable::Count(packet -> PartOne);
int partTwoCount = Enumerable::Count(packet -> PartTwo);
(由於我不經常使用C ++語法,因此可能略有偏離,但是您應該明白這個想法-任何人都可以自由更正語法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.