64位整数高低位的数据获取与赋值操作探讨

news2024/11/19 3:50:02

参考本篇->LOWORD和HIWORD函数_hidword-CSDN博客 


一,如何获取一个64位整数的高32位和低32位

原理其实很简单:

解释一些概念

①十六进制和二进制直接挂钩

一个十六位的十六进制数【0XAABBCCDD12345678】转为二进制的过程是把其中的每个数转为对应的二进制,如下图所示:

②字的概念

字的英文是word,

一个字是2个字节,在【#include <windows.h>】库中有相应的数据类型是WORD

两个字是4个字节,在【#include <windows.h>】库中有相应的数据类型是DWORD,加个D就是double的意思

没有操作四个字的数据类型(也可能是博主孤陋寡闻了,有错恳请指出)

使用字类型来操作数据和使用基本数据类型操作数据本质是相同的,例如下图,DWORD操作4个字节,int也操作4个字节,因此它们的指针都能对整数变量的地址进行正确操作(这也是为什么逆向分析过程中工具的反汇编代码大都不用int*来表示4字节指针而是用DWORD*)

③大、小端存储

“计算机只存储二进制数据”算是个只要看到这篇博客的人就肯定清楚的概念,但存放的顺序并不统一,高前低后为大端(高低指数据的高位地位,前后指内存地址前后,较小的地址在前),因此大端模式是按数据的正序来存储的,小端则反之

另外,存储时是以字节(4个bit位,即4个二进制数或者说1个十六进制数)为一个单位来存储的,因此所说的大、小端正反排序针对的是每个字节,具体到每个字节对应的二进制bit位则都是正序的,如下图所示!

有了上面的概念就能解释清楚下面的代码了——

HIDWORD(x):将x的地址强转为双字指针(DWORD*)后加一,等于跳过一个字指向高位(小端存储,高位在后),最后解引用获得高位的双字(DWORD)数据即高32位

LODWORD(x):将x的地址强转为双字指针(DWORD*),原本指向“四字”数据的地址强转为双字指针(DWORD*),相当于保留低位双字舍弃高位双字

#include <bits/stdc++.h>
#include <windows.h> //字类型在这里面,但万能头文件里没有windows.h所以单独引入
//定义两个宏,分别用于截取高位和地位
#define HIDWORD(x) (*((DWORD*)&(x) + 1))
#define LODWORD(x) (*((DWORD*)&(x)))
int main() {
  int64_t dwValue; //
  dwValue = 0XAABBCCDD12345678;
  int32_t high = HIDWORD(dwValue);
  int32_t low = LODWORD(dwValue);
  printf("high = 0x%x, low = 0x%x", high, low); //输出high = 0xaabbccdd, low = 0x12345678
  return 0;
}


二,如何对一个64位整数的高/低位赋值

标题【】所探讨的仅是如何获取高/低位的数据,如何对一个64位整数的高/低位赋值呢?

例如一个64位整数为【0x123456abdc654321】,对其高位赋值为a1b1c1d1后的结果为【0xa1b1c1d1dc654321】,效果为改变了原数据的前半部分,对低位赋值的效果同理,这样的效果要如何编程实现?留下博主的一些拙见——

注意这里的数据类型都要定义成无符号的,否则会出现部分数据赋值错误的情况,主要原因是对于有符号32位整数强转为64位整数后的数据前面补的是f而不是0(即int32_t num = 0xabcd1234强转为int64_t的结果是0xffffffffabcd1234而不是0x00000000abcd1234,前者会导致计算数据错误)

uint64_t hidword(uint64_t num, uint32_t high_value){ //(num:预期赋值的64位有符号整数, high_value:预赋值的32位有符号整数即高位值)
    return (uint64_t)LODWORD(num) + ( (uint64_t)high_value << 32 ); //注意要先将其强制转换为64位后再左移32位,得到的结果与num的低位相加(即对高位赋值=旧低位+新高位)
}
uint64_t lodword(uint64_t num, uint32_t low_value){ //同理
    uint64_t h = (uint64_t)HIDWORD(num) << 32;
    uint64_t l = (uint64_t)low_value;
    return h + l; //(对低位赋值=旧高位+新低位,注意HIDWORD只是获取到高位的数据,还得用左移32位让该数据到真实的高位)
}

下面是运行测试结果,这里输出的名字单纯为了对齐数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

构建中小型企业网络-单臂路由

1.给IP地址配置好对应的IP和网关 2.配置交换机 3.路由配置 在交换机ge0/0/1中配置端口为trunk是可以允许多个vlan通过的&#xff0c;但路由器是不能够配置vlan&#xff0c;而交换机和路由器间连接的只有一根线&#xff0c;一个端口又只能配置一个ip地址&#xff0c;只有一个ip地…

人脸识别概念解析

目录 1. 概述 2. 人脸检测 3. 人脸跟踪 4. 质量评价 5. 活体检测 6. 特征提取 7. 人脸验证 8. 人脸辨识 1. 概述 人脸识别在我们的生活中随处可见&#xff0c;例如在大楼门禁系统中&#xff0c;它取代了传统的门禁卡或密码&#xff0c;提高了进出的便捷性和安全性。在商…

如何通过4G DTU实现现场仪表的分布式采集并发布到MQTT服务器

提供一份资料文档以一个具体的工程案例来讲解&#xff0c;如何通过4G DTU实现现场仪表的分布式采集并发布到MQTT服务器。采用的数据采集模块是有人物联的边缘采集4G DTU&#xff0c;采集多个多功能电表和远传水表的数据&#xff0c;通过MQTT通讯的型式传送给MQTT服务器&#xf…

Elsevier(爱思唯尔)期刊—Latex模板下载、使用、投稿过程

目录 一、Elsevier期刊-Latex模板下载 1. Elsevier 通用latex模板下载&#xff1a;【elsarticle.zip】 2. Elsevier 复杂版式latex模板下载&#xff1a;【els-cas-templates.zip】&#xff0c;有单栏和双栏版本 二、Elsevier期刊-Latex模板使用 1. 通用模板【elsarticle.zi…

【源码】IM即时通讯源码/H5聊天软件/视频通话+语音通话/带文字部署教程

【源码介绍】 IM即时通讯源码/H5聊天软件/视频通话语音通话/带文字部署教程 【源码说明】 测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;根据情况开启SSL 登录后台看到很熟悉。。原来是…

如何在 Ubuntu 12.04 上使用 Apache 配置 WebDAV 访问

简介 WebDAV 是内置在 HTTP 中的分布式网络编辑实现&#xff0c;允许您轻松共享文件并与他人协作。 我们可以在 Web 服务器中安装此扩展&#xff0c;以允许通过 Web 浏览器远程读写访问本地文件。在本指南中&#xff0c;我们将在带有 Apache Web 服务器的 Ubuntu 12.04 VPS 上…

Mysql--创建数据库

一、创建一个数据库 “db_classes” mysql> create database db_classes; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | information_schema | | mysql | | performance_schema | |…

PeLK: 大卷积核强势回归,高达101 × 101,提出了外围卷积

paper&#xff1a;https://arxiv.org/pdf/2403.07589 code&#xff1a;暂无 目录 0. 摘要 1. 引言 2. 相关工作 2.1. Large Kernel Convolutional Networks 2.2. Peripheral Vision for Machine Learning 3. 密集卷积优于条纹卷积 4. 参数高效的大核卷积神经网络 4.1. …

【Vue】如何使用Webpack实现打包操作

一、Webpack介绍 Webpack最主要的作用就是打包操作&#xff0c;由两个核心部分构成分别是“出口”与“入口”。wbepack是现在比较热门的打包工具了&#xff0c;它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。说的直白一点&#xff0c;通过webpac…

ansible-playbook离线升级centos内核

目录 概述实践ansible目录结构关键代码执行效果 结束 概述 内核离线包官网下载地址如下&#xff1a; 地址 实践 ansible目录结构 如对 ansible 不熟悉&#xff0c;离线包下载有问题&#xff0c;请至此地址下载&#xff0c;按本文操作可直接使用。 相关文章链接如下 文章地…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…

Android Studio gradle 默认sourceSets配置

一. AS默认的sourceSets配置 sourceSets在Android插件中如何使用的&#xff1a;android {sourceSets {main {manifest.srcFile AndroidManifest.xmljava.srcDirs [src]resources.srcDirs [src]aidl.srcDirs [src]renderscript.srcDirs [src]res.srcDirs [res]assets.srcD…

企业智能名片小程序:AI智能跟进功能助力精准营销新篇章

在数字化浪潮的推动下&#xff0c;企业营销手段不断迭代升级。如今&#xff0c;一款集手机号授权自动获取、智能提醒、访客AI智能跟进及客户画像与行为记录于一体的企业智能名片小程序&#xff0c;正以其强大的AI智能跟进功能&#xff0c;助力企业开启精准营销的新篇章。 通过深…

STM32用HAL库函数实现硬件IIC

/*出处&#xff1a;【STM32入门教程-2024】第12集 IIC通信与温湿度传感器AHT20(DHT20)_哔哩哔哩_bilibili */ 这篇笔记我主要介绍代码实现&#xff0c;想要了解原理的请自己看视频&#xff0c;我不过多赘述了。 AHT20通信数据帧格式&#xff1a; ①对照手册上的通信流程写初…

政安晨:【Keras机器学习示例演绎】(二十)—— 综合梯度的模型可解释性

目录 综合梯度 设置 综合梯度算法 可视化渐变和集成渐变的辅助类 让我们试一试 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c…

debian配置BIND DNS服务器

前言 局域网内有很多台主机&#xff0c;IP难以记忆。 而修改hosts文件又难以做到配置共享和统一&#xff0c;需要一台内网的DNS服务器。 效果展示 这里添加了一个域名hello.dog&#xff0c;将其指向为192.168.1.100。 同时&#xff0c;外网的域名不会受到影响&#xff0c;…

实验8 NAT配置

实验8 NAT配置 一、 原理描述二、 实验目的三、 实验内容1.实验场景2.实验要求 四、 实验配置五、 实验步骤2.静态NAT配置3.NAT Outbound配置4.NAT Easy-IP配置 一、 原理描述 2019年11月26日&#xff0c;全球43亿个IPv4地址正式耗尽&#xff0c;这意味着没有更多的IPv4地址可…

Java 网络编程之TCP(五):分析服务端注册OP_WRITE写数据的各种场景(二)

接上文 二、注册OP_WRITE写数据 服务端代码&#xff1a; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.S…

STM32H750外设之ADC开关控制功能介绍

目录 概述 1 ADC开关控制介绍 2 开关控制功能流程 2.1 软件使能ADC 的流程 2.2 软件禁止 ADC 的流程 3 相关寄存器 3.1 ADCx_ISR 3.2 ADCx_CR 4 使能/禁止ADC流程图 ​5 写入 ADC 控制位时的限制 概述 本文介绍STM32H750外设之ADC开关控制功能&#xff0c;该功能是…

禅道项目管理系统身份认证绕过漏洞

禅道项目管理系统身份认证绕过漏洞 1.漏洞描述 禅道项目管理软件是国产的开源项目管理软件&#xff0c;专注研发项目管理&#xff0c;内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能&#xff0c;完整覆盖了研发项目管理的核心流程。 禅道项目管理系统…