【问题标题】:Converting UInt8 C++ values to C# byte array将 UInt8 C++ 值转换为 C# 字节数组
【发布时间】: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


【解决方案1】:

使用:

pingdata[i, j] = (byte)Marshal.ReadByte((IntPtr)(ptr.ToInt64() + (i * d2 + j)));

解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-12-15
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多