【发布时间】:2020-03-22 15:56:53
【问题描述】:
我需要从内存中读取几千个以 null 结尾的 C 字符串。
我目前的解决方案如下
byte* stringPointer; // Obviously has an actual value in my codebase
var stringLength = 0;
while (*(stringPointer + stringLength) != 0x00)
{
stringLength += 1;
}
var unmanagedString = Encoding.UTF8.GetString(stringPointer, stringLength);
这很好,但我只是想知道是否有更有效的方法来做到这一点,考虑到每次调用这个函数时我都会读取数千个这样的字符串。
有什么想法吗?
【问题讨论】:
-
[MarshalAs(UnmanagedType.LPStr)] string stringPointer? -
这能回答你的问题吗? Reading a null-terminated string
-
“有什么想法吗?”——这就是“太宽泛”的定义。你现在的代码有什么问题?有无数种不同的方法可以将空终止字符串从非托管内存封送到托管对象。最好的方法将利用 .NET 互操作 API。 “每次调用这个函数时,我都会读取数千个这样的字符串。” -- 你多久调用一次这个函数?作为一次性的事情,1000 根琴弦是轻而易举的事。您必须经常这样做才能成为问题;那时你应该问你是否经常需要那么多字符串。
标签: c# performance unmanaged null-terminated