【发布时间】:2017-06-08 07:57:58
【问题描述】:
我有一个包含 UInt8 值的一维 C++ 数组 - 我想转换这些值并将它们放入一个二维 C# byte 数组中。目前,我的代码给了我不正确的值。这是我的代码:
IntPtr ptr = GetDataFromCPPSide();
byte[,] data = new byte[dimension1, dimension2];
for(int i = 0; i < dimension1; i ++)
{
for(int j = 0; j < dimension2; j++)
{
data[i, j] = Marshal.ReadByte((IntPtr)(ptr.ToInt64() + j + i * dimension2) * 1));
}
}
目前这只会正确转换一些值。我确定这与我在for 循环中转换值的方式有关。我已经在 C++ 端进行了检查,并且正确返回了值。有什么想法吗?
【问题讨论】:
-
当您处理字节到某物或反之亦然的转换时总是考虑编码。没有它是一个很大的危险信号。
-
@Tigran 你能详细说明一下吗?
-
在从一个字节流转换为数据类型时,您必须使用编码。是 Unicode 吗? UTF-8?还有什么? that 不是你的问题,但无论如何都要考虑一下。这就是评论而不是答案。
-
还有一个错误的评论,二进制流没有编码的概念。您在这里混淆了字符串和字节数组。当您不知道实际问题时,基本上毫无意义的噪音。
-
@Blindy 和 byte 字符串本身都没有编码概念。编码是从一种状态转换到另一种状态的问题。我的评论是指没有它,这是一个不好的信号。
标签: c# c++ arrays type-conversion marshalling