当前位置: 首页 > news >正文

常见面试题:字节序判别和转换

在计算机中,字节序指的是多字节数据的存储顺序。最常见的字节序有两种:大端字节序(Big-Endian)和小端字节序(Little-Endian)。
大端字节序是指最高有效位(Most Significant Bit,简称MSB)保存在内存的低地址中,而最低有效位(Least Significant Bit,简称LSB)保存在内存的高地址中。小端字节序则相反,LSB保存在内存的低地址中,而MSB保存在内存的高地址中。
在进行网络通信或跨平台数据交换时,需要确保数据的一致性,因此需要判别或转换字节序。
在C++语言中,可以通过以下方法判别或转换字节序:

判别字节序

可以使用如下代码判别当前系统的字节序:

#include <iostream>  void checkEndian() {  int num = 1;  if (*(char *)&num == 1) {  std::cout << "Little-Endian" << std::endl;  } else {  std::cout << "Big-Endian" << std::endl;  }
}void checkEndian1(){int x = 0x1234;if(*(char*)&x == 0x12){std::cout << "Big-Endian" << std::endl;  }else{std::cout << "Little-Endian" << std::endl;  }
} 

该代码将整数1的地址强制转换为字符指针,如果LSB为1,则说明当前系统是小端字节序,否则为大端字节序。

转换字节序

对于多字节数据,可以使用以下方法进行字节序转换:

#include <iostream>  
#include <cstring>  int convertEndian() {  unsigned int num = 0x12345678; // 32位整数,假设为大端字节序  unsigned char bytes[4];  memcpy(bytes, &num, sizeof(num)); // 将num的字节拷贝到bytes数组中  if (bytes[0] == 0x12 && bytes[1] == 0x34 && bytes[2] == 0x56 && bytes[3] == 0x78) {  std::cout << "Big-Endian" << std::endl;  unsigned int converted_num = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0]; // 转换为大端字节序  std::cout << "Converted: " << std::hex << converted_num << std::endl;  } else {  std::cout << "Little-Endian" << std::endl;  unsigned int converted_num = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]; // 转换为小端字节序  std::cout << "Converted: " << std::hex << converted_num << std::endl;  }  return 0;  
}int convertEndian1(){unsigned int num = 0x12345678;unsigned int dst = (num&0xff) << 24|(num&0xff00) << 8|(num&0xff0000) >> 8|(num&0xff000000) >> 24;std::cout << "Origin:" << std::hex << num << " "<< "Converted:" << std::hex << dst << " "<< "htonl:" << std::hex << htonl(num) << std::endl;return 0;
}

该代码将整数0x12345678的字节拷贝到一个字符数组中,然后根据字节序的不同进行转换。对于大端字节序,最高有效字节保存在数组的第一个元素中,因此按照顺序进行转换即可;对于小端字节序,最低有效字节保存在数组的第一个元素中,需要倒序进行转换。

相关文章:

常见面试题:字节序判别和转换

在计算机中&#xff0c;字节序指的是多字节数据的存储顺序。最常见的字节序有两种&#xff1a;大端字节序&#xff08;Big-Endian&#xff09;和小端字节序&#xff08;Little-Endian&#xff09;。 大端字节序是指最高有效位&#xff08;Most Significant Bit&#xff0c;简称…...

Maxwell与canal工具对比

Maxwell和Canal是两种不同的数据同步工具&#xff0c;都是在数据迁移、数据同步、数据分发等领域发挥作用的工具&#xff0c;但是它们之间存在一些差异。 Maxwell Maxwell是一种开源的MySQL数据库同步工具&#xff0c;它可以将MySQL数据库的binlog转化为JSON格式&#xff0c;…...

SpringBoot——如何运行Python脚本并返回数据

文章目录 运行python脚本并输出如何输入参数 运行python脚本并输出 要让Python脚本返回数据给调用它的Java代码&#xff0c;你可以在Python脚本中使用打印或输出函数将结果输出到标准输出&#xff08;stdout&#xff09;中。 以下是一个示例&#xff0c;在Python脚本中返回数…...

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧———索引与数据上传(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

R语言初学者书籍推荐

Home | Bookdown 这个网站上有很多R语言的书籍&#xff0c;并且一直在更新&#xff0c;阅读起来没有难度。 今天搜索材料的时候&#xff0c;检索到下面这本书&#xff1a; 有输入&#xff0c;才会有输出。...

Taro+Vue3,点击按钮把另一个页面分享出去

useShareAppMessage​ 监听用户点击页面内转发按钮&#xff08;Button 组件 openTypeshare&#xff09;或右上角菜单“转发”按钮的行为&#xff0c;并自定义转发内容。等同于 onShareAppMessage 页面生命周期钩子。 使用时&#xff0c;必须为页面配置 enableShareAppMessage…...

CSS基础:学习CSS样式的基本语法和应用,了解如何美化网页。

CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页上元素&#xff08;例如文字、图像、背景等&#xff09;外观和布局的样式语言。通过使用CSS&#xff0c;您可以控制和改变网页的外观&#xff0c;使其更具吸引力和易于使用。 下面是一些CSS基础知识和常用的语法&#…...

MySQL语句总和之表数据操作(增删改查)

目录 1、增加 insert into 表 (字段1&#xff0c; 字段3&#xff0c; 字段5) values(value1, value2, value3&#xff09; insert into 表 [(字段1&#xff0c; 字段2&#xff0c; 字段3....)] values(value1, value2,value3.....)[,(value1, value2, value3....) .....] i…...

HDFS中snapshot快照机制

HDFS中snapshot快照机制 介绍作用功能实现相关命令和操作相关命令 介绍 snapshot是数据存储的某一时刻的状态记录&#xff0c;备份&#xff08;backup&#xff09;则是数据存储的某一个时刻的副本HDFS snapshot快照是整个文件系统或某个目录在某个时刻的镜像&#xff0c;该镜像…...

YOLOv5基础知识入门(5)— 损失函数(IoU、GIoU、DIoU、CIoU和EIoU)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。使用YOLOv5训练模型阶段&#xff0c;需要用到损失函数。损失函数是用来衡量模型预测值和真实值不一样的程度&#xff0c;极大程度上决定了模型的性能。本节就给大家介绍IoU系列损失函数&#xff0c;希望大家学习之后能够有…...

Centos7源码安装redis

1、下载redis Index of /releases/ 2、解压redis tar -xvf redis-6.2.9.tar.gz 3、进入解压后的目录 cd redis-6.2.9/4、指定内存分配器为 libc make MALLOClibc 5、进入src目录&#xff0c;安装 cd src && make install6、运行 ./redis-server 7、添加开机…...

[静态时序分析简明教程(九)]多周期路径set_multicycle_path

静态时序分析简明教程-多周期路径 一、写在前面1.1 快速导航链接 二、多周期路径2.1 多周期路径的SDC命令2.2 路径常规约束2.3 建立/保持规格2.4 位移量2.5 多时钟周期案例 三、总结 一、写在前面 一个数字芯片工程师的核心竞争力是什么&#xff1f;不同的工程师可能给出不同的…...

Unity学习笔记--使用 C# 开发一个 LRU

目录 什么是 LRULRU 核心思想代码实现一&#xff1a;双向链表 哈希表分析代码实现二&#xff1a;OrderedDictionary分析项目案例预告结尾 什么是 LRU 在计算机系统中&#xff0c;LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;是一种缓存置换算法。…...

【一】初步认识数据库

数据库概览数据库 缘起表(Table)的理解用表来定义数据库数据库系统的理解概念层次的理解实例层次的理解 数据库管理系统的理解从用户角度看从系统实现角度看典型的数据库管理系统 数据库语言数据库定义、操纵、控制语言数据库语言 VS 高级语言 内容回顾练习 数据库概览 走马观…...

HTML <section> 标签

实例 文档中的区段&#xff0c;解释了 PRC&#xff1a; <section><h1>PRC</h1><p>The Peoples Republic of China was born in 1949...</p> </section>定义和用法 <section> 标签定义文档中的节&#xff08;section、区段&#x…...

PHP 之房贷计算器、组合贷

一、等额本金 // &#xff08;等额本金&#xff09; //$loanAmount>贷款金额 //$loanPeriod>贷款年限 //$interestRate>贷款利息 function calculateEqualPrincipalPayment($loanAmount, $loanPeriod, $interestRate) {$monthlyPrincipal $loanAmount / ($loanPerio…...

解决Vue+Element UI使用表单rules国际化时From表单验证信息不能实时更新

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 博主在工作之余开始进行自动化测试平台的开发&#xff0c;虽然已经996一个月了但是还是在使劲挤时间做这件事情&#xff0c;目前平台使用前端框架vu…...

友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕

屏幕介绍 本文以中景园1.69寸LCD&#xff0c;驱动芯片ST7789V2该款屏幕示例&#xff0c;屏幕的分辨率为240*280 屏幕引脚说明 NanoPi NEO IO介绍 屏幕与板子的IO连接关系 屏幕NanoPi NEOGNDGNDVCC3.3VSCLPC2SDAPC0RESPG11DCPA1CSPC3BLKPA0 下载交叉编译器和linux内核源码并按教…...

MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

文章目录 CControlBar通过CToolBar类开发文字工具栏和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…...

Android Https

本质&#xff1a;在客户端和服务端使用非对称加密协商出一套对称密钥&#xff0c;每次发送数据前加密&#xff0c;收到后解密&#xff0c;达到加密传输 http ssl 在http之下增加了安全层&#xff0c;用于保障http的加密传输 HTTPS连接 TLS连接步骤 1.客户端发送 client h…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

手动给中文分词和 直接用神经网络RNN做有什么区别

手动分词和基于神经网络&#xff08;如 RNN&#xff09;的自动分词在原理、实现方式和效果上有显著差异&#xff0c;以下是核心对比&#xff1a; 1. 实现原理对比 对比维度手动分词&#xff08;规则 / 词典驱动&#xff09;神经网络 RNN 分词&#xff08;数据驱动&#xff09…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...