`
tcspecial
  • 浏览: 911602 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

64位网络字节函数

阅读更多

        网络开发经常会遇到网络字节与主机字节顺序转换的问题,网络传输采用大端序方式,现代OS大多采用的小端序方式,需要转换。linux提供了htonl(),htons(),ntohl(),ntohs()4个函数处理16,32位整数的转换,没有提供64位整数的转换。

       思路:既然系统提供了32位整数的转换,可以将64位整数拆分成两个32位转换后,移位做与操作即可

      

uint64 htonll(uint64 val)
{
	if (__BYTE_ORDER == __LITTLE_ENDIAN)
	{
                // 高位移到低位并转换,低位转换后移到高位,后作与操作
		return ( (uint64)htonl((int)(val>>32&0xffffffff)) )|( ((uint64)htonl((int)(val&0xffffffff)))<<32 );
	}
	else if (__BYTE_ORDER == __BIG_ENDIAN)
	{
		return val; 
	}
}

 

  

分享到:
评论

相关推荐

    C++ 网络字节顺序转换函数、ip格式转换函数

    需要注意的是,这些函数只对网络字节序与主机字节序不同的平台有效。 - 自定义实现:对于不支持上述函数的环境,可以手动编写转换函数。例如,对于一个32位整数,可以分为4个8位字节,然后按照大端或小端规则重新...

    网络字节序和主机字节序

    网络字节序和主机字节序 在计算机科学中,字节序(Endianness)是指整数在内存中保存的顺序。不同的 CPU 有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。 常见的有两种字节序:...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    在网络通信中,为了确保数据在不同系统间的一致性和可移植性,通常采用大端字节序作为网络字节序的标准。这是因为大端字节序更容易被人类理解和解释,同时也更容易被各种不同的系统接受和处理。 ### 字节序转换 当...

    网络字节顺序和主机字节顺序的转换

    - **` htonl()`**:将主机字节顺序的32位整数转换为网络字节顺序。 - **`ntohs()`**:将网络字节顺序的16位整数转换为主机字节顺序。 - **` ntohl()`**:将网络字节顺序的32位整数转换为主机字节顺序。 这些函数的...

    高低字节转换示例Demo

    要实现高低字节互换,可以创建一个辅助函数,该函数接受一个16位或32位的整数,然后根据需要交换其高位和低位字节。对于16位数据,可以使用位运算符如`(左移)和`&gt;&gt;`(右移)来完成转换;对于32位数据,可以分两步...

    linux网络编程常用函数.docx

    Linux 提供了以下四个函数来实现字节序的转换: * `htons()`: 将主机字节序的 16 位数转换为网络字节序。 * `htonl()`: 将主机字节序的 32 位数转换为网络字节序。 * `ntohs()`: 将网络字节序的 16 位数转换为主机...

    c++,java,php,c# 的网络字节流读写文件

    总的来说,这四种语言在网络字节流读写文件上都有各自的特性和接口。C++和C#更注重底层控制,而Java和PHP则提供了更为抽象的API。在处理字节顺序时,所有语言都需要考虑目标平台的字节序,并进行相应的转换,以确保...

    易语言字节集与字节数组快速互转

    在这个例子中,我们首先创建了一个包含四个字节的字节集,然后使用`复制内存_字节集`函数将其内容复制到一个长度为4的字节数组中。 相反,字节数组转字节集的代码可能是这样的: ```易语言 .字节数组变量 = {0x01,...

    教育科研-学习工具-RIJNDAEL的子字节函数的小型硬件实现.zip

    RIJNDAEL的子字节函数基于一个256×256的查找表,每个8位输入对应一个唯一的8位输出。在硬件实现时,由于存储和查找大表的限制,通常需要设计高效的硬件逻辑来替代传统的查找表。这可能涉及到有限状态机的设计、查找...

    5_网络字节序_werevj4_

    标题"5_网络字节序_werevj4_"暗示这是一个关于理解和检测网络字节序的编程实践,可能是由werevj4这位开发者编写的。这个程序可能是一个简单的C或C++代码示例,用于判断本地系统是采用大端字节序还是小端字节序,同时...

    络字节序、地址转换源代码

    1. `htons()`(Host to Network Short):将主机字节序的短整型(16位)转换为网络字节序。 2. `ntohs()`(Network to Host Short):将网络字节序的短整型转换为主机字节序。 3. `htonl()`(Host to Network Long)...

    网络字节序_werevj4_源码.rar

    例如,`htonl`函数将主机字节序的32位整数转换为网络字节序,`ntohl`则是将网络字节序的32位整数转换回主机字节序。 在实际编程中,我们还需要考虑到字节序问题可能影响到的数据结构,比如结构体(struct)。如果...

    易语言字节集动态添加

    4. 加解密:在进行加密或解密操作时,通常需要对字节集进行一系列的位运算和异或操作,字节集的动态添加功能在此场景下非常实用。 总之,易语言字节集动态添加是编程中处理二进制数据不可或缺的一部分,通过灵活...

    网络编程之------网络编程常用函数

    网络编程是计算机科学中的一个重要领域,它涉及到通过...总结来说,网络编程涉及一系列函数,从创建套接字、建立连接、接收和发送数据到关闭连接,以及处理网络字节序等问题。理解和熟练运用这些函数是网络编程的基础。

    VC中网络编程的常用函数

    在VC++环境中进行网络编程,通常涉及到一系列的函数和数据类型,这些都是为了建立、管理和通信套接字。首先,我们来看看几个关键的概念和函数。 1. **SOCKET类型**:这是Windows Socket API中的核心数据类型,它是...

    UNIX网络API函数

    **字节序函数**用于在主机字节序和网络字节序之间进行转换。在不同的计算机架构中,字节的存储顺序可能不同,比如Intel架构通常是小端字节序(Little Endian),而网络传输数据则通常采用大端字节序(Big Endian)。...

    易语言图片句柄取图片字节集

    3. 转换为字节集:将获取到的图片二进制数据转换成字节集,易语言提供了`创建字节集`或`复制字节集`函数,将图片数据填充到字节集中。 4. 使用或存储字节集:转换后的字节集可以保存到文件,也可以在网络上传输,...

    浮点数、Double与字节数组互转,C/C++函数

    可以使用`htonl`(主机到网络,long类型)、`htons`(主机到网络,short类型)、`ntohl`和`ntohs`(网络到主机)函数处理字节序,但这些函数只适用于整数类型。对于浮点数和Double,可以编写自定义函数来实现字节序...

    PB位操作函数

    例如,TCP/IP协议中的报文头就包含了许多位标志,使用位操作函数可以方便地构建和解析这些标志,从而正确处理网络通信过程中的各种控制信息。 此外,PB位操作函数还可以在游戏开发、嵌入式系统、硬件驱动程序和其他...

    易语言字节集转汇编

    3. **函数_字节集还原**:这个函数可能用于将字节集恢复到其原始形式,例如,如果字节集是从文件或网络流中读取的,此函数可以用来将字节集写回,保持数据完整性。 4. **函数_查看字节集**:这个函数提供了一种可视...

Global site tag (gtag.js) - Google Analytics