热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机中数据的存储和读取

总的来说就是,计算机中全是二进制数据的01,表示成16进制也就是字节的存储0xFF,这些二进制对于计算机是没有任何意义的,之所以变成了有符号和无符号的各种类型(intcha

    总的来说就是,计算机中全是二进制数据的 0 1,表示成16进制也就是字节的存储0xFF,这些二进制对于计算机是没有任何意义的,之所以变成了有符号和无符号的各种类型(int   char   unsigned  int) ,只是针对我们人来说的,人存进去整形数据,我们取的时候就得按照4个字节这样取数据( 还需要处理最高地址字节的高位符号位 )

所以如何才能取出正确的数据,就得按照之前存储数据的人的想法取数据(一个数值用几个字节表示,有没有符号),否则数据有问题

例如计算机中是 0xC8,二进制是 1100 1000 ,如果按照char获得数据就是 -56,如果是unsigned char 就是200,为什么会这样呢,因为char能表示的最大数是-128~127,因为负数在计算机中的表示是 负数的补码,

	负数的补码表示方法是:将负数表示成二进制原码(负数最高位是1,正数最高位是0)然后将原码取反(1变0,0变1),即反码,将反码加			1(最后一位上加1),即转化为补码。

       

最近开始弄音频数据,才发现以前学的东西全还给老师了,音频文件是 short 16位存储一个取样 样本,用来表示音量大小,但是应该如何从数据正确的取数据呢

按照音频数据是short 有符号 来讲解实例

unsigned char*  inBuf = new unsigned char[2];

unsigned char*  outBuf = new unsigned char[2];


此时数据是signed short   为什么按照unsigned  char 的buffer来存储从文件中读到的数据呢,这个和 signed char是没有区别的,只是一个字节存储了计算机中的数值,如果是signed char 存储数据,我们取低字节数值的时候就得转成 unsigned char处理,因为(低字节是没有符号的,只有高字节的最高位才是符号位,如果是unsigned char数据存储,取高字节数值的时候,需要转换成signed char数值  才能得到正确的值)


姑且按照unsigned char* 处理,

        float frame = 0.0;
char*p = NULL;
int ii = 0;
if ( (ii= ibuf[i+1] & 0x80) == 0x80) { //负数
p = (char*)&(ibuf[i+1]);
frame = (ibuf[i]+(*p)*256)/32768.0;
}
else{
frame = (ibuf[i]+ibuf[i+1]*256)/32768.0;
}


存储的时候直接按照

        obuf[i+1] = (short)(frame*32768.0)>>8;
obuf[i] = (short)(frame*32768.0)%256;

       

short来说,16位,最高位是 符号位,也就是说 高位字节  1-7位是值,低位字节 0-8全是数值


2、双声道的数据,存储数据是  左右声道数据交替存储   LR LR LR LR  ,对于16位取样大小来说,就是

short 表示范围是    (-2的15次方 ~~~~ 2的15次方-1)     也就是 32768


3、一般是小端存储,也试试  高位在高字节,低位在低字节






推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
author-avatar
mobiledu2502857683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有