我有一个非常痛苦的库,目前它正在接受 C# 字符串作为获取数据数组的一种方式;显然,这使得编组 pinvokes 更容易。
那么如何将 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++ 中的 char*,这会容易得多......
编辑:函数调用是
DataElement.SetByteValue(string inArray, VL Length);
其中 VL 是一个“值长度”,一个 DICOM 类型,并且函数本身是由 SWIG 作为 C++ 库的包装器生成的。似乎选择的表示是字符串,因为它可以相对容易地跨越托管/非托管边界,但是在整个项目中的 C++ 代码(这是 GDCM)中,char* 只是用作字节缓冲区。所以,当你想设置你的图像缓冲区指针时,在 C++ 中它相当简单,但在 C# 中,我遇到了这个奇怪的问题。
这是黑客攻击,我知道最好的办法可能是让 SWIG 库正常工作。我真的不知道该怎么做,如果存在的话,我宁愿在 C# 端快速解决。