Question

Y at-il net d'accueillir les fonctions de conversion en C #? Googler et ne pas trouver beaucoup. : P

Était-ce utile?

La solution

IPAddress.HostToNetworkOrder et IPAddress.NetworkToHostOrder ?

Chaque méthode a surcharges pour 16, 32 et 64 des nombres entiers binaires.

Autres conseils

@ réponse de jon-pigeon d'argile est le plus précis en fonction de votre question. Cependant, « ntoh_ » et « hton_ » fonctions C sont largement utilisés afin de traduire entre little-endian et grand architectures informatiques -endian .

Si votre intention est pour effectuer des conversions endianess , il y a un classe BitConverter (classe statique dans l'ensemble de base) qui vous apporte une manière plus appropriée. Surtout quand:

  • Travailler avec tableau d'octets (largement utilisés dans les fichiers ou les flux réseau).
  • Detecting endianess architecture de la machine d'exécution .
  • Conversion de structures de base au-delà des nombres entiers (booléens, décimaux) sans transtypage.
  • Votre code n'est pas lié aux opérations de réseau (espace de noms System.Net).

System.Memory NuGet inclut la classe statique System.Buffers.Binary.BinaryPrimitives, qui comprend méthodes statiques pour faire face à « boutisme », dont beaucoup de ReverseEndianness. surcharges Sur base dotnet, HostToNetWorkOrder est mis en œuvre en utilisant ces méthodes de ReverseEndianness. Sur une architecture little-endian (qui je pense est tout ce que .NET support) méthodes de HostToNetworkOrder et ReverseEndianness ont des performances identiques sur dotnetcore.

Le cadre dotnet (de net461) Cependant, la performance de l'appel HostToNetworkOrder est un peu (pas tout à fait 2x) plus lent que d'appeler ReverseEndianness.

Je crois que le compilateur JIT est en fait boîtier spécial ces méthodes pour invoquer l'instruction x86 BSWAP. Si vous dupliquez exactement la mise en œuvre de la méthode ReverseEndianness(long) dans votre propre code de base, il sera presque 4x plus lent que d'appeler la mise en œuvre de System.Memory; ce qui suggère il y a la magie JIT qui se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top