二进制

QT资源文件

霸气de小男生 提交于 2020-03-09 06:14:44
Qt资源体系采用平台独立机制来存储应用程序执行时的二进制文件。这种机制在应用程序需要一些确定的文件(图标、翻译文件等等)而且又不想冒丢失文件的风险时是有用的。 资源体系依赖于 qmake, rcc (Qt's resource compiler), 和 QFile 的紧密协作。Qt 3 的 qembed 工具和 image collection 机制被废除。 Resource Collection Files (.qrc) 与应用程序关联的应用程序由 .qrc 文件来指定,它用XML记录硬盘上的文件和对应的随意指定的资源名称,应用程序通过资源名称来访问资源。 一个.qrc 文件的例子: <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>images/copy.png</file> <file>images/cut.png</file> <file>images/new.png</file> <file>images/open.png</file> <file>images/paste.png</file> <file>images/save.png</file> </qresource> </RCC> .qrc 文件中列出的资源文件是程序的源码树的一部分。指定的路径是 .qrc 文件所在目录的相对路径。注意

操作系统

我只是一个虾纸丫 提交于 2020-03-08 16:47:19
一些微小的细节,虽然90%的时间你用不上: 1.溢出 2.舍掉小很多的数 本门课虽然用到汇编,但并不是为了写汇编,而是要读懂c编译后的汇编 本门课的核心是直到怎样利用好分层存储系统,从程序角度了解性能 c没有任何内存保护,因此可能导致不好的bug,需要明白怎样运作 32位机器意味着地址也是32位,64位同理 !、||、&&的特点: 1.将0视为false,任何非0视为true 2.总是返回0或1 3.调用会提前终止 4.这三个都和真正的位计算(~,|,&)不一样 左移<<,右移>>: 算术右移:首位是0,右移后高位填充的就是0,如果是1那就填充1 逻辑右移:高位填充的永远是0 大部分机器做的是算术移位 对于C,无符号数做的是逻辑移位 整数 补码与原码: 对于4、3、2、1、0位,原码(无符号数)对应的是16、8、4、2、1,补码对应的是-16、8、4、2、1(即最高位取相反数),利用这个技巧进行十进制和二进制的转换。同时,据此可以知道n位能表示的十进制数的从负(Tmin)到正(Tmax)的范围,也可以据此知道为什么一个很大的正数突然变成一个负数 该点在java和python不会用到,而c中unsigned是一个明确的数据类型,因此可以在c中声明unsigned long之类的数据类型 这一点用在for循环中极其重要。如果for循环中使用到了unsigned(例如

1142: 二进制数的大小

帅比萌擦擦* 提交于 2020-03-08 14:49:32
1142: 二进制数的大小 时间限制: 1 Sec 内存限制: 128 MB 提交: 4028 解决: 2476 [状态] [讨论版] [提交] [命题人:admin] 题目描述 输入三个2 进制的数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。 int bToD(char str[]) { //函数返回二进制数str对应十进制整数 } 输入 输入三个2 进制的数,用空格隔开。所有数据均为非负数,二进制数长度不超过30。 输出 将对应的十进制整数按从小到大的顺序输出 样例输入 Copy 1101 110 1011 样例输出 Copy 6 11 13 # include <stdio.h> int bToD ( char str [ ] ) { int i = 0 , num = 0 ; while ( str [ i ] != '\0' ) { num = num * 2 + ( str [ i ] - '0' ) ; //加‘0’,‘0’的ASCII码为48, i ++ ; } return ( num ) ; } int main ( ) { int bToD ( char str [ ] ) ; char str [

信息的表示和处理(一)信息存储

依然范特西╮ 提交于 2020-03-08 11:42:38
信息存储 大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间。顾名思义,这个虚拟地址空间只是一个展现给机器级程序的概念性映像。实际的实现是将动态随机访问存储器(DRAM)、闪存、磁盘存储器、特殊硬件和操作系统软件结合起来,为程序提供一个看上去统一的字节数组。 十六进制表示法 一个字节由八位组成。在二进制表示法中,它的值域是0000 0000 2 ~1111 1111 2 。如果看成十进制整数,它的值域就是0 10 ~255 10 。两种符号表示法对描述位模式来说都不是非常方便。二进制法太冗长,而十进制表示法与位模式转化很麻烦。代替的方法时,以16位基数,或者叫做十六进制数,来表示位模式。十六进制(简写为“hex”)使用数字0~9以及字符A~F来表示十六个可能的值。图1-1展示了十六个十进制数字对应的十进制值和二进制值。用十六进制书写,一个字节的值域为00 16 ~FF 16 。 图1-1 十六进制法。每个十六进制数字都对十六个值中的一个进行了编码 在C语言中,以0x或0X开头的数字常量被认为是十六进制的值。字符A~F既可以大写也可以小写,甚至可以大小写混合。比如FA1D37B 16

以太坊中RLP编码详解一文全搞懂

人盡茶涼 提交于 2020-03-07 12:44:44
定义 RLP(Recursive Length Prefix,递归长度前缀)是一种编码算法,用于编码任意的嵌套结构的二进制数据,它是以太坊中数据序列化/反序列化的主要方法,区块、交易等数据结构在持久化时会先经过RLP编码后再存储到数据库中。 RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。字符串指的是一串二进制数据,列表是一个嵌套递归的结构,里面可以包含字符串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一个复杂的列表。其他类型的数据需要转成以上的两类,转换的规则不是RLP编码定义的,可以根据自己的规则转换,例如struct可以转成列表,int可以转成二进制(属于字符串一类),以太坊中整数都以大端形式存储。 RLP编码规则 对于单个字节,如果它的值范围是[0x00, 0x7f],它的RLP编码就是它本身。 否则,如果一个字符串的长度是0-55字节,它的RLP编码包含一个单字节的前缀,后面跟着字符串本身,这个前缀的值是0x80加上字符串的长度。由于被编码的字符串最大长度是55=0x37,因此单字节前缀的最大值是0x80+0x37=0xb7,即编码的第一个字节的取值范围是[0x80, 0xb7]。 如果字符串的长度大于55个字节,它的RLP编码包含一个单字节的前缀

符号(汉字)编码方式

拟墨画扇 提交于 2020-03-07 11:56:31
字符集之在UTF-8中,一个汉字为什么需要三个字节? (一)在UTF-8中,一个汉字为什么需要三个字节? UNICODE是万能编码,包含了所有符号的编码,它规定了所有符号在计算机底层的二进制的表示顺序。有关Unicode为什么会出现就不叙述了,Unicode是针对所有计算机的使用者定义一套统一的编码规范,这样计算机使用者就避免了编码转换的问题。Unicode定义了所有符号的二进制形式,也就是符号如何在计算机内部存储的,而且每个符号规定都必须使用两个字节来表示,也就是用16位二进制去代表一个符号,这样就导致了一个问题,英文编码的空间浪费,因为在ANSI中的符号都是一个字节来表示的,而使用了UNICODE编码就白白浪费了一个字节。也就代表着Unicode需要使用两倍的空间去存储相应的ANSI编码下的符号。虽然现在硬盘或者内存都很廉价,但是在网络传输中,这个问题就凸显出来了,你可以这样想想,本来1M的带宽在ANSI下可以代表1024 1024个字符,但是在Unicode下却只能代表1024 1024/2个字符。也就是1MB/s的带宽只能等价于512KB/s,这个很可怕啊。所以为了解决符号在网络中传输的浪费问题,就出现了UTF-8编码,Unicode transfer format -8 ,后面的8代表是以8位二进制为单位来传输符号的,但是这样又导致了一个问题,虽然UTF

习题10-7 十进制转换二进制 (15分)

淺唱寂寞╮ 提交于 2020-03-07 09:14:38
本题要求实现一个函数,将正整数n转换为二进制后输出。 函数接口定义: void dectobin( int n ); 函数 dectobin 应在一行中打印出二进制的 n 。建议用递归实现。 裁判测试程序样例: #include <stdio.h> void dectobin( int n ); int main() { int n; scanf("%d", &n); dectobin(n); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 10 输出样例: 1010 解答: if(n/2>0) dectobin(n/2); printf("%d",n%2); } 来源: CSDN 作者: youandworld 链接: https://blog.csdn.net/qq_30377869/article/details/104708890

位与&, 位或| ,位异或 ^ 总结

孤者浪人 提交于 2020-03-07 09:06:28
目录 按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。 另,负数按补码形式参加按位与运算。 “与运算”的特殊用途: (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。 (2)取一个数中指定位 方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。 例:设X=10101110, 取X的低4位,用 X & 0000 1111 = 00001110 即可得到; 还可用来取X的2、4、6位。 按位或运算符(|) 参加运算的两个对象,按二进制位进行“或”运算。 运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1; 即 :参加运算的两个对象只要有一个为1,其值为1。 例如:3|5 即 00000011 | 0000 0101 = 00000111 因此,3|5的值得7。  另,负数按补码形式参加按位或运算。 “或运算”特殊作用: (1)常用来对一个数据的某些位置1。 方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零

实验七

早过忘川 提交于 2020-03-07 08:47:33
Part1:验证性实验 验证性实验2:已知文本数据文件file1.dat,从中读取数据,找出最高分和最低分学生信息,并输出到屏幕上。 ex1_2.cpp 运行结果截图 对line9进行修改 for(i=0; i<N; i++) ↓↓↓ 改为 while( !feof(fp) )。 运行结果正确 运行结果截图 验证性实验3 验证性实验4 二进制文件和文本文件的区别 ①二者的主要区别是存储数值型数据的形式不同。 文本文件的数据流由一个个字符组成,每个字符均以ASCII代码存储,占一个字节; 二进制文件的数据流由二进制字节代码组成,将数据按其在内存中的存储形式存储在文件中。 ② 参数 "r"(只读) 为输入打开一个文本文件   "w"(只写) 为输出打开一个文本文件   "a"(追加) 向文件文件尾添加数据   "rb"(只读) 为输入打开一个二进制文件   "wb"(只写) 为输出打开一个二进制文件   "r+"(读写) 为读写打开一个文本文件   "w+"(读写) 为读写建立一个新的文本文件   "a+"(读写) 为读写打开一个文本文件   "rb+"(读写) 为读写打开一个二进制文件   "wb+"(读写) 为读写建立一个新的二进制文件   "ab+"(读写) 为读写打开一个二进制文件 ex1_5.cpp 写一个简单的程序,尝试从二进制文件fifile4.dat中读出数据

实验七

痞子三分冷 提交于 2020-03-07 08:47:05
实验结论 Part1: 验证性实验 验证性实验2 尝试对line29做修改,程序运行结果正确 给出运行结果截图。再次运行程序,运行结果正确。 // 从文本文件file1.dat中读取数据,找出最高分和最低分学生信息,并输出在屏幕上 #include <stdio.h> #include <stdlib.h> #define N 10 // 定义一个结构体类型STU typedef struct student { int num; char name[20]; int score; }STU; int main() { STU st, stmax, stmin; int i; FILE *fp; // 以只读文本方式打开文件file1.dat fp = fopen("file1.dat", "r"); if( !fp ) { // 如果打开失败,则输出错误提示信息,然后退出程序 printf("fail to open file1.dat\n"); exit(0); } stmax.score = 0; // 先假定最高分是0,后面如发现比当前最高分还高的分数,就更新最高分 stmin.score = 100; // 先假定最低分是100分,后面如发现比当前最低分更低的分数,就更新最低分 while( !feof(fp) ) { fscanf(fp, "%d %s %d", &st