C# ntohs()和ntohl()等价物?

C# ntohs()和ntohl()等价物?,c#,htonl,C#,Htonl,C#中是否有网络到主机的转换函数?谷歌搜索,却找不到什么P和 每个方法都有16位、32位和64位整数的重载。根据您的问题是最准确的。然而,“ntoh_uu”和“hton_u”C函数被广泛使用,以便在两者之间进行转换 如果您打算执行endianess转换,那么有一个(核心程序集中的静态类)为您提供了一种更合适的方法。特别是: 使用字节数组(广泛用于文件或网络流) 运行时机器的体系结构 在不进行类型转换的情况下,将基本结构转换为整数(布尔、小数)以外的内容 您的代码与网络操作(System.Net

C#中是否有网络到主机的转换函数?谷歌搜索,却找不到什么P

每个方法都有16位、32位和64位整数的重载。

根据您的问题是最准确的。然而,“ntoh_uu”和“hton_u”C函数被广泛使用,以便在两者之间进行转换

如果您打算执行endianess转换,那么有一个(核心程序集中的静态类)为您提供了一种更合适的方法。特别是:

  • 使用字节数组(广泛用于文件或网络流)
  • 运行时机器的体系结构
  • 在不进行类型转换的情况下,将基本结构转换为整数(布尔、小数)以外的内容
  • 您的代码与网络操作(System.Net命名空间)无关
nuget软件包包括
System.Buffers.Binary.BinaryPrimitives
静态类,其中包括用于处理“endianness”的静态方法,包括许多
ReverseEndianness的重载。在dotnet core上,
HostToNetWorkOrder
使用这些
ReverseEndianness
方法实现。在一个小小的endian体系结构上(我认为它是.NET的全部支持)
HostToNetworkOrder
ReverseEndianness
方法在dotnetcore上具有相同的性能

然而,在dotnet框架(net461)上,调用
HostToNetworkOrder
的性能比调用
ReverseEndianness
稍慢(不到2倍)


我相信JIT编译器实际上是对这些方法进行特殊的封装,以调用BSWAP x86指令。如果您在自己的代码库中完全复制
ReverseEndianness(long)
方法的实现,它将比调用
System.Memory
实现慢近4倍;这表明JIT魔法正在发生。

除了类没有与htonl等价的函数之外。我必须获取字节,将它们反转,然后再转换回
位转换器
不支持任何非本机endianness。(至少内置的没有,Jon或Marc做了一个功能更强大的——但是制作垃圾临时数组仍然是一种浪费)我假设这两种方法做同样的事情。我注意到重载只用于有符号的东西。他们在未签名的东西上安全吗?@pm100:你会认为他们是自反的,是的。但我不想宣称这是绝对事实:)我不确定你所说的“未签名的东西安全”是什么意思-你必须先投,在这一点上,它不会是未签名的…首先-考虑到他们处理的很多事情都是未签名的IP地址,令人惊讶的是uint32等没有重载。所谓“安全”,我的意思是,我对将已签名转换为未签名、摆弄位和回溯保持警惕,一般来说,这是符号传播/截断的方法,。。。wiednesses@SSpoke:无论是
ntohs
还是
ntohl
都将是
NetworkToHostOrder
,但是对于不同的大小都有不同的重载。@Leandros:听起来你应该做的是将结果转换为
int
,然后将结果转换回
uint