Visual C++ CLI, string to hex byte array

Witam,

chcę zamienić stringa na tablice typu byte o wartościach szesnastkowych.

np.

Dane wejściowe:

System::String^ mac = {“00:FA:FF:44:01:33”}; podałem przypadkowe liczby(adres), nie musi być rozdzielacza dwukropka

Dane wyjściowe:

array^ macx = gcnew array {0x00, 0xFA, 0xFF, 0x44, 0x01, 0x33};

Jak dokonać konwersji?

http://msdn.microsoft.com/en-us/library/system.text.encoding%28v=VS.85%29.aspx

Czyli:

using namespace System::Text; // <-- nie zapomnij o tym !

System::String^ mac = “00:FA:FF:44:01:33”;

Encoding^ unicode = Encoding::Unicode;

array^unicodeBytes = unicode->GetBytes(mac);

Coś nie do końca to działa, powstaje całkiem inny mac.

Sprawdziłem przy pomocy wireshark.

Rozbijasz ciąg znaków za pomocą string.Split i parsujesz każdą wartość int.Parse z NumberStyles.HexNumber. W C++/CLI będzie trzeba się trochę bawić(a mi się nie chce), więc podam Ci kod C#:

var macx = (from part in mac.Split(':') select int.Parse(part, NumberStyles.HexNumber)).ToArray(); [/code]

:wink:

Masz jakieś odgórne nakazy, by męczyć się w C++/CLI?

Nie, ale jakoś zacząłem w tym się bawić i się trzymam. Chociaż dużo ramu bierze aplikacja w tym :confused:

A proponujesz coś innego?

Dużo? Bez przesady… Gdy komputery mają po kilka GB RAM-u, 10MB w te czy we wte różnicy nie robi. Przyzwyczai się - .NET “tak ma”(maszyna wirtualna). :wink:

C++/CLI został wymyślony, by ułatwić łączenie kodu natywnego(głównie C++) z zarządzanym(.NET - C#/VB.NET/F#/etc.), nie po to by go używać “normalnie”. Od tego jest C#, Visual Basic.NET czy F# i te języki polecam(który sobie wybierzesz zależy od Ciebie, C# jest “pochodną” C/C++, Visual Basic.NET to pochodna BASIC-a, a F# dziedziczy z ML i OCaml).

Co nazywasz “ramem”? Dużo tzn. ile? Brakuje Ci pamięci?

C++/CLI używa się do łączenia kodu zarządzanego z niezarządzanym, modułów aplikacji natywnych z kodem .NET. Jeśli piszesz w tym coś innego, to tylko utrudniasz sobie życie.