无法从'void'转换为'byte []'

时间:2015-04-24 13:59:08

标签: c#

我正在尝试这样做:

public string getName(uint offset, byte[] buffer)
{
     return Encoding.ASCII.GetString(PS3.GetMemory(offset, buffer));
}

但它给我一个错误:

cannot convert from 'void' to 'byte[]'

但我不知道为什么。

public void GetMemory(uint offset, byte[] buffer)
{
      if (SetAPI.API == SelectAPI.TargetManager)
            Common.TmApi.GetMemory(offset, buffer);
      else if (SetAPI.API == SelectAPI.ControlConsole)
            Common.CcApi.GetMemory(offset, buffer);
}

5 个答案:

答案 0 :(得分:7)

与其他答案相反,我认为您不需要修改GetMemory方法,它看起来像调用 void方法(例如here })。

看起来GetMemory写入您提供的缓冲区,因此您可能只需要:

// Name changed to comply with .NET naming conventions
public string GetName(uint offset, byte[] buffer)
{
    // Populate buffer
    PS3.GetMemory(offset, buffer);
    // Convert it to string - assuming the whole array is filled with useful data
    return Encoding.ASCII.GetString(buffer);
}

另一方面,假设缓冲区正好正确的名称大小。实际情况是这样的吗?目前还不清楚您对价值的预期,或预期的价值。

答案 1 :(得分:0)

现在你的函数public void GetMemory(uint offset, byte[] buffer)没有返回类型(void)。将您的功能byte[]更改为返回void而不是public byte[] GetMemory(uint offset, byte[] buffer) { if (SetAPI.API == SelectAPI.TargetManager) return Common.TmApi.GetMemory(offset, buffer); else if (SetAPI.API == SelectAPI.ControlConsole) return Common.CcApi.GetMemory(offset, buffer); }

public string getName(uint offset, byte[] buffer)
{
     return Encoding.ASCII.GetString(PS3.GetMemory(offset, buffer));
}

然后您可以这样使用: -

Common.TmApi.GetMemory

假设: - Common.CcApi.GetMemorybyte[]返回$http

答案 2 :(得分:0)

您的GetMemory方法没有返回类型(void)。因此,您无法在Encoding.ASCII.GetString(PS3.GetMemory(offset, buffer))中使用它,因为GetString期望从GetMemory返回一个值。更改您的GetMemory方法,使其返回类型为byte[]

public byte[] GetMemory(uint offset, byte[] buffer)
{
      if (SetAPI.API == SelectAPI.TargetManager)
            return Common.TmApi.GetMemory(offset, buffer);
      else if (SetAPI.API == SelectAPI.ControlConsole)
             return Common.CcApi.GetMemory(offset, buffer);
}

正如评论中指出的那样,我在此假设Common.TmApi.GetMemoryCommon.CcApi.GetMemory的回复类型为byte[]

编辑:正如Jon Skeet指出的那样,Common.TmApi.GetMemoryCommon.CcApi.GetMemory 似乎没有返回任何值,因此您可能需要考虑他的答案或类似的方法,通过"返回"将值作为GetMemory方法的输出参数,然后将后续行的值传递给GetString

答案 3 :(得分:0)

当您在代码中显示时,函数GetMemory会返回一个空格(换句话说,不会返回任何内容)。因此,您无法将该函数的返回值传递给另一个函数(在本例中为GetString函数)。

您需要找到一种方法来修改GetMemory以返回byte[]数组,或者找一些其他方式来访问您需要的内存。

答案 4 :(得分:-1)

GetMemory方法应返回byte []:

public byte[] GetMemory(uint offset, byte[] buffer)
{
  if (SetAPI.API == SelectAPI.TargetManager)
    return Common.TmApi.GetMemory(offset, buffer);
  else if (SetAPI.API == SelectAPI.ControlConsole)
    return Common.CcApi.GetMemory(offset, buffer);
  else
   throw new NotImplementedException();
}