将未签名的char c ++转换为c#

时间:2020-01-17 03:29:33

标签: c# c++ translate

我可以得到帮助将此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());

1 个答案:

答案 0 :(得分:0)

简短的答案是:可能,但您实际上不应该。

C ++广泛使用指针,而C#在用户代码中尽可能避免使用指针。尽管可以使用指针,但在进行除互操作之外的大多数操作时,它会皱眉。即使这样,使用.NET编组来抽象实际的指针也更为常见。

正如在对该问题的各种评论中提到的那样,C#的引用类型原则上可以随时移动。实际上,这不会发生,但是是允许的,并且不能保证将来不会发生。

更糟糕的是,字符串是不变的。而不是像在C ++中那样分配缓冲区并用字符填充它,而是拥有一个字符串引用,该字符串引用会在每次更改其内容时更改。即使您可以获取一个字符串实例的地址,但更改字符串时该地址也将无效。您可以改用StringBuilder,但是内部数组的地址在调整大小后几乎总是会改变。

我的问题是我的程序中需要tmp3

这似乎是问题的核心。当您认为您在程序中需要tmp3时,您可能不需要。这一切都取决于它正在做什么。如果没有更多关于您正在使用的信息,我们将无济于事。

所以... 为什么您需要在程序中使用tmp3吗?