golang 解析oracle 数据文件头

package main

import (
	"encoding/binary"
	"fmt"
	"io"
	"os"
)
// Powered by 黄林杰 15658655447
// Usered for parser oracle datafile header block 1 ....
// oracle 数据文件头块解析
// KCBlockStruct represents the structure of the Oracle block
type KCBlockStruct struct {
	TypeKCBH    byte
	FrmtKCBH    byte
	RDBAKCBH    uint32
	ChkvalKCBH  uint16
	KCCFHDBI    uint32
	KCCFHDBNX   []byte
	KCCFHCSQ    uint32
	KCCFHFSZ    uint32
	KCCFHFNO    uint16
	KCCFHTYP    uint16
	KCVFHRDB    uint32
	KSCNBAS     uint32
	KSCNWRP     uint16
	KCVFHCRT    uint32
	KCVFHRLC    uint32
	KCVFHRLS    struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVFHBSBSC  struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVFHSTA    uint16
	KCVFHCPC    uint32
	KCVFHCCC    uint32
	KCVFHTSN    uint32
	KCVFHTLN    uint16
	KCVFHTNM    [30]byte
	KCVFHPRC    uint32
	KCVFHPRS    struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVCPSN     struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVCPTime   uint32
	KCVCPThr    uint16
	KCVCPRA     struct {
		KCRBASEQ uint32
		KCRBABNO uint32
		KCRBABOF uint32
	}
	// Add more fields based on your structure
}

func main() {
	// Open the Oracle data file
	file, err := os.Open("C:\\Users\\ZMI\\Desktop\\asm-diskb\\newoasm\\SYSTEM.260.1096299059.dbf")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close()

	// Read the first block (assuming 8192 bytes)
	blockSize := 8192
	block := make([]byte, blockSize)
	// 指定要读取的块号
	blockNumber := 1

	// 计算块的偏移量
	blockOffset := blockSize * blockNumber

	// 移动文件指针到块的起始位置
	_, err = file.Seek(int64(blockOffset), io.SeekStart)
	if err != nil {
		fmt.Println("Error seeking to block:", err)
		return
	}



	_, err = file.Read(block)
	if err != nil {
		fmt.Println("Error reading file:", err)
		return
	}
	hexString := fmt.Sprintf("%X", block)

	// 打印结果
	fmt.Println("oracle 8kb  block Hexadecimal representation:", hexString)


	// Parse the block using the defined structure
	kcBlock := parseKCBlock(block)

	// Print the extracted information
	fmt.Printf("TypeKCBH: %X\n", kcBlock.TypeKCBH)
	fmt.Printf("FrmtKCBH: %X\n", kcBlock.FrmtKCBH)
	fmt.Printf("RDBAKCBH: %X\n", kcBlock.RDBAKCBH)
	// Print more fields as needed
	fmt.Printf("KCCFHDBI: %d\n", kcBlock.KCCFHDBI)
	fmt.Printf("KCCFHDBNX: %s\n", kcBlock.KCCFHDBNX)
}

func parseKCBlock(block []byte) KCBlockStruct {
	kcBlock := KCBlockStruct{
		TypeKCBH: block[0],
		FrmtKCBH: block[1],
		RDBAKCBH: binary.LittleEndian.Uint32(block[4:8]),
		// Parse more fields based on your structure
		KCCFHDBI: binary.LittleEndian.Uint32(block[28:32]),
		KCCFHDBNX: block[32:40],
	}
	return kcBlock
}

##代码执行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是美颜SDK?美颜SDK对比评测

美颜SDK在视频直播中发挥着越来越重要的作用。为了实现实时、高质量的美颜效果,各种视频直播美颜SDK应运而生。本文将对这些技术进行深入解析与比较。 一、技术原理解析 深度学习技术通过大量的训练数据学习人脸特征,从而实现更为自然的美颜效果。传统…

干货分享:如何提高商城系统网页访问速度?

如今,商城系统网页的访问速度对于用户体验和销售业绩至关重要。用户对于网页的加载速度要求越来越高,一旦加载速度过慢,用户可能会选择离开,甚至转向竞争对手的网站。因此,提高商城系统网页的打开速度是每个电商运营者…

2023年【N1叉车司机】找解析及N1叉车司机复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年N1叉车司机找解析为正在备考N1叉车司机操作证的学员准备的理论考试专题,每个月更新的N1叉车司机复审模拟考试祝您顺利通过N1叉车司机考试。 1、【多选题】《中华人民共和国特种设备安全法》第八十三…

ROS1 学习11 坐标系tf 管理系统 简介及demo示例

坐标系是我们非常熟悉的一个概念,也是机器人学中的重要基础,在一个完整的机器人系统中,会存在很多坐标系,这些坐标系之间的位置关系该如何管理? ROS给我们提供了一个坐标系的管理神器——TF。 比如在机械臂形态的机器…

ubuntu 20.04+ORB_SLAM3 安装配库教程

目录 安装ros(如果只是运行ORB-SLAM3,可以跳过安装)0. ros 安装教程1. 安装opencv2. 安装Pangolin3. 安装Eigen34.安装Python & libssl-dev5.安装boost库6.安装ceres库(不必须)7.安装Sophus库(不必须)8. 安装g20库…

多线程概述及创建

什么是线程? 线程(thread)是一个程序内部的一条执行路径。 我们之前启动程序执行后,main方法的执行其实就是一条单独的执行路径。 程序中如果只有一条执行路径,那么这个程序就是单线程的程序。 多线程是什么? 多线程是指从软…

Linux 读写权限的配置

文章目录 Linux文件权限详解 一、文件权限二、修改文件访问权限的方法三、UMASK值四、三种特殊权限suid、sgid、sticky(sticky权限工作环境中相对常用)五、ACL访问控制列表六、文件权限操作的常用命令 Linux文件权限详解 Linux系统中不仅是对用户与组根…

Cesium 实战 - 加载水经微图下载资源问题 - 地球南北极有蓝圈,南北极空洞

Cesium 实战 - 加载水经微图下载资源问题 - 地球南北极有蓝圈 错误展示排错过程解决问题完整代码在线示例 在某个项目中,客户提到一个问题,即地球南北极会有一个蓝色的洞,经复现,确实有这个问题。见下图。 经过排查,最…

高难度工业废水处理有哪些注意事项

高难度工业废水处理的注意事项包括: 预处理:在将废水输送至污水处理系统前,应进行预处理,以减轻处理设备的负荷,提高处理效率。预处理可以包括去除废水中的悬浮物、沉淀物以及防止化学物质的沉积等。针对不同废水选择…

nestJs(三) 数据库

真正的服务往往包括数据存储。 本篇将介绍如何建立 NestJs 的数据库连接、并使用数据库联表查询。这样就就是完整的后台服务了。 开发准备 下载并安装 Mysql创建 school 库 create database school;3.安装 nestjs/typeorm typeorm mysql2 npm install --save nestjs/typeor…

浅了解下:运营商大数据如何挖掘电销同行网站,APP,精准获客 ?

今天我们要讲的是运营商精准大数据营销。运营商精准大数据营销只是精准营销的一种,精准营销筛选包含了电话营销这个词。那么电话营销如何通过运营商大数据找到精准的客户?电销如何通过大数据找到准确的客户来源? 在全网时代,大数…

echarts:graph图表拖拽节点

需求:实现一个可视化编辑器,用户可以添加节点,并对节点进行拖拽编辑等 实现期间碰到很多问题,特意记录下来,留待将来碰到这些问题的同学,省去些解决问题的时间 问题1:节点的data如下&#xff0…

无需管理底层基础设施,亚马逊云科技向量数据库轻松创建ML增强的搜索体验和应用程序

当我们进入一家图书馆时,图书馆的入口处会有几台电脑供你检索相关的书籍,你可以检索你想要的书籍的名字例如:《百年孤独》、《悲惨世界》等等,你也可以检索作者例如:川端康成、鲁迅、加缪等等,当然你也可以…

读书充电,温暖你的冬日,本期为大家送出几本架构师成长和软件架构技术相关的好书,助你度过这个不太景气的寒冬!

目图书录 ⭐️《高并发架构实战:从需求分析到系统设计》⭐️《架构师的自我修炼:技术、架构和未来》⭐️《中台架构与实现:基于DDD和微服务》⭐️《分布式系统架构:架构策略与难题求解》⭐️《流程自动化实战:系统架构…

家电制造产线物料追踪RFID智能管理解决方案

家电行业需求 家电行业的生产节奏快,供应商众多,导致入厂车辆经常出现拥堵和等待的情况,生产线可能因为关键零部件物流未到位而停产,传统的家电制造行业生产物流模式主要依赖人工进行零部件的存储、拣选、配送、核对和发放等环节…

中国唯一!华为入选Gartner®企业低代码应用平台魔力象限

近日,全球咨询机构Gartner发布 《Magic Quadrant™ for Enterprise Low-Code Application Platforms》报告,华为入选该象限,作为中国唯一入选厂商,华为已连续两年入选Gartner企业低代码应用平台魔力象限。 华为云Astro低代码平台采…

动态获取填充表格数据时的特定值的赋值

1、如图 <el-tablev-loading"loading":data"columnList"bordertooltip-effect"dark":size"tableSize":height"tableHeight"style"width: 100%; margin: 15px 0"><el-table-column type"selection…

【MySQL】随手笔记(积跬步至千里)

一、常用函数 &#xff08;1&#xff09;uuid() select uuid(); //生成随机数 select replace(uuid(),-,); //将随机数的-去掉 select upper(replace(uuid(),-,)); ///改成大写应用举例&#xff1a; &#xff08;1&#xff09;非自增主键 非自增主键&#xff0c;insert语…

优化奥德赛:揭开训练人工神经网络的本质

一、介绍 近年来&#xff0c;人工智能领域取得了显著的进步&#xff0c;而这场革命的核心是训练人工神经网络 &#xff08;ANN&#xff09; 的复杂过程。这些网络受到人脑的启发&#xff0c;能够从数据中学习复杂的模式和表示。人工神经网络成功的核心是认识到训练它们从根本上…

Blackmagic Design DaVinci Resolve Studio18(达芬奇调色剪辑)mac/win中文版

在影视制作领域&#xff0c;调色和剪辑是至关重要的环节&#xff0c;它们直接决定了作品的观感和质量。而Blackmagic Design DaVinci Resolve Studio18&#xff08;达芬奇调色剪辑&#xff09;作为业界领先的专业调色剪辑软件&#xff0c;以其出色的性能和强大的功能&#xff0…