繁体   English   中英

将无符号字符 C++ 转换为 C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM