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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将无符号字符c ++转换为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吗?

以上是关于将无符号字符c ++转换为c#的主要内容,如果未能解决你的问题,请参考以下文章

怎样用c将无符号整型转化为字符型

如何在C中将无符号字符数组转换为十六进制字符串

将 C/C++ 无符号字符转换为 JAVA 时出现问题

创建 Java 实用函数以将无符号字符数组转换为字符串

在 C 中从浮点数转换为无符号字符

C ++将字符串转换为无符号字符并将其转换回以获取字符串