У меня очень болезненная библиотека, которая в данный момент принимает строку C# как способ получения массивов данных; по-видимому, это упрощает сортировку для pinvokes.C# ushort [] преобразование строки; Это возможно?
Так как я могу сделать массив ushort в строку байтами? Я пробовал:
int i;
String theOutData = "";
ushort[] theImageData = inImageData.DataArray;
//this is as slow like molasses in January
for (i = 0; i < theImageData.Length; i++) {
byte[] theBytes = System.BitConverter.GetBytes(theImageData[i]);
theOutData += String.Format("{0:d}{1:d}", theBytes[0], theBytes[1]);
}
я могу сделать это так, но это не заканчивается ничем отдаленно близко к здравому количеству времени.
Что мне здесь делать? Небезопасно? Пройти через какой-то промежуток между IntPtr?
Если бы это был символ * в C++, это было бы значительно проще ...
редактирования: вызов функции является
DataElement.SetByteValue(string inArray, VL Length);
где VL является 'Value Length', тип DICOM , а сама функция создается как оболочка для библиотеки C++ с помощью SWIG. Кажется, что выбранное представление является строковым, потому что это может легко пересекать управляемые/неуправляемые границы, но на протяжении всего кода C++ в проекте (это GDCM) char * просто используется в качестве байтового буфера. Итак, когда вы хотите установить указатель на буфер изображения, на C++ это довольно просто, но на C# я застрял в этой странной проблеме.
Это хакерство, и я знаю, что, вероятно, лучше всего сделать библиотеку SWIG правильной. Я действительно не знаю, как это сделать, и предпочел бы быстрое обходное решение на стороне C#, если таковое существует.
, что получил его! Благодаря! (первая часть кажется достаточно быстрой, даже с дополнительной копией). – mmr 2008-11-08 02:29:05
Использовал первый пример, и он отлично поработал. Спасибо!!! – 2016-01-27 20:08:38