java字节是否与C#字节相同?

时间:2011-06-03 04:55:31

标签: c# java dll byte native

如果输入参数是字节数组 - byte [],则dll中的native方法适用于java。 如果我们在c#中使用相同的方法,则抛出EntryPointNotFoundException。

是因为java和c#中的byte []是不同的东西?如果是这样我应该如何使用c#中的原生函数?

4 个答案:

答案 0 :(得分:14)

Java缺少无符号类型。特别是,Java缺少无符号字节的基本类型。 Java字节类型是有符号的,而C#字节是无符号的,sbyte是有符号的。

答案 1 :(得分:6)

  

这是因为java和c#中的byte []是不同的东西吗?

  • Endianness: Java内部存储Big Endian,而.NET默认为Little Endian。
  • 签名: C#字节是无符号的。 Java字节已签名。

请参阅different results when converting int to byte array - .NET vs Java

答案 2 :(得分:2)

原生功能的签名是什么?你如何在Java和C#中声明它?

EntryPointNotFoundException最常见的原因是函数名被破坏(例如,如果函数是用C ++编写的,则为true)或拼写错误。

另一个问题来源是用于区分ANSI和Unicode版本函数的WinAPI函数的'W'和'A'后缀。 .NET互操作机制可以尝试猜测函数后缀,这可能是混淆的来源,

答案 3 :(得分:0)

Java字节:

  

java字节:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)。字节数据类型对于在大数组中节省内存非常有用,因为内存节省实际上很重要。在限制可以帮助您澄清代码的地方,也可以使用它们来代替int。变量范围有限的事实可以作为一种文档形式。

more for Java Byte

C#字节

  

Byte表示一个8位无符号整数,Byte是一个不可变的值类型,它表示无符号整数,其值的范围从0(由Byte.MinValue常数表示)到255(由Byte.MaxValue表示)不变)。 .NET Framework还包括一个带符号的8位整数值类型SByte,它表示范围从-128到127的值。

C# key words

more for c# Byte