[英]translate unsigned char c++ to c#
我能得到帮助将这个 C++ 代码翻译成 C# 吗?
auto tmp2 = new unsigned char[tmp1 + 1];
auto tmp3 = (DWORD)tmp2;
std::cout << "tmp3: " << std::hex << tmp3 << std::endl;
tmp1 值为 0xBC3000,tmp3 为 0x1276040
这是我目前拥有的:
var tmp2 = new byte[tmp1 + 1];
//tmp3 ???
MessageBox.Show("tmp3 : " + tmp3.ToString());
简短的回答是:这是可能的,但你真的不应该。
C++ 广泛使用指针,而 C# 在用户代码中尽可能避免它们。 虽然可以使用指针,但在执行除互操作之外的大多数事情时,它是不赞成的。 即便如此,使用 .NET 编组来抽象实际指针也更为常见。
正如关于该问题的各种评论中所提到的,C# 的引用类型原则上可以随时移动。 在实践中,这不会发生,但这是允许的,并且不能保证将来不会发生。
更糟糕的是,字符串是不变的。 不是像在 C++ 中那样分配缓冲区并用字符填充它,而是有一个字符串引用,只要您更改其内容,就会更改该引用。 即使您可以获得一个字符串实例的地址,当您更改字符串时,该地址也会失效。 您可以改用StringBuilder
,但内部数组的地址在调整大小时几乎总是会发生变化。
我的问题是我的程序中需要 tmp3
这似乎是问题的核心。 虽然您认为您的程序中需要tmp3
,但您可能不需要。 这一切都取决于用它做什么。 如果没有关于您正在使用它做什么的更多信息,我们将无能为力。
那么......为什么你需要在你的程序中使用tmp3
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.