我正在尝试这样做:
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);
}
答案 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.GetMemory
和byte[]
返回$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.GetMemory
和Common.CcApi.GetMemory
的回复类型为byte[]
。
编辑:正如Jon Skeet指出的那样,Common.TmApi.GetMemory
和Common.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();
}