c# - 字节序,语言,硬件和网络

原文 标签 c# java c++ networking programming-languages

我们知道字节序与计算机存储数据的方式有关。大型字节序计算机体系结构包括IBM 370,摩托罗拉68000和Sun Sparc。小字节序计算机包括英特尔系列(80486,奔腾等)和VAX。

由于JVM,Java始终是Big-Endian。
由于协议(protocol),网络应始终为Big-Endian。

  • C,C++和C#在它们正在运行的计算机上展开?
  • 由于该协议(protocol),网络应始终为Big-Endian。如果在发送之前不叫htons和htonl怎么办?如果发件人是intel机器上的C++,则发送的数据将为Little-endian。这样对吗?
  • 因此,如果我们知道所有客户端和服务器将使用具有相同体系结构的计算机并使用相同的程序语言,则无需关心字节序(称为ntohl和htonl)。这样对吗?
  • 最佳答案

  • 对于C和C++,至少是。字节序通常取决于计算机(但也可能取决于编译器)。对于C#,我不知道。
  • 许多网络协议(protocol)都是big-endian,是的。如果不调用htonl,那么您将不会在little-endian计算机上创建有效的数据包。
  • 因此,您应该始终调用htonl等(或使用任何一种语言的等效语言)。因为即使您今天有一个统一的环境,也几乎可以肯定,将来这种情况会改变。

  • 更具体地说,您应该始终在尽可能靠近和的位置将转换为尽可能靠近接口(interface)的位置。如果您在代码库中散布了字节顺序转换调用,则很难推断出您的代码是否合理。

    相关文章:

    java - 清除共享的首选项

    c++ - Visual Studio 2008调试;写入值时中断

    c# - AutoResetEvent-快速进行两个set调用不能保证线程释放-为什么?

    c# - 私有(private)WPF依赖项属性

    java - 转换对象时event.getItem()和comboBox.getSelectedItem()有什么区别

    java - 如何获取序列化的tomcat HttpSession以重新填充Spring SessionRegistry

    c# - 仅针对一项服务的aspNetCompatibilityEnabled

    c# - 空字符串是空引用吗?

    c# - Unity插件:编码(marshal)C++ double *将C#中的数组翻倍

    c++ - C++和SDL问题