在本文中,我们将带你了解MySQL中的二进制数据在这篇文章中,我们将为您详细介绍MySQL中的二进制数据的方方面面,并解答mysql的二进制数据类型有什么用?常见的疑惑,同时我们还将给您一些技巧,以帮
在本文中,我们将带你了解MySQL中的二进制数据在这篇文章中,我们将为您详细介绍MySQL中的二进制数据的方方面面,并解答mysql的二进制数据类型有什么用?常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的CPU中的二进制数据(小数篇)、CPU中的二进制数据(整数篇)、c#/ asp.net显示数据库中的二进制数据、java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?。
本文目录一览:- MySQL中的二进制数据(mysql的二进制数据类型有什么用?)
- CPU中的二进制数据(小数篇)
- CPU中的二进制数据(整数篇)
- c#/ asp.net显示数据库中的二进制数据
- java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?
MySQL中的二进制数据(mysql的二进制数据类型有什么用?)
如何在MySQL中存储二进制数据?
答案1
小编典典phpguy 的回答是正确的,但我认为那里的附加细节有很多混淆。
基本答案在BLOB
数据类型/属性域中。 BLOB 是 Binary Large Object 的缩写,该列数据类型专门用于处理二进制数据。
请参阅MySQL 的相关手册页。
CPU中的二进制数据(小数篇)
1.用二进制数表示小数
主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0
2.什么是浮点数
浮点数是指用符号,尾数,基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然是2。因此,实际的数据中往往不考虑基数,只用符号,尾数,指数这三部分即可表示浮点数。
也就是说,64位(双精度浮点数)和32位(单精度浮点数)的数据,会被分为三部分来使用。
符号部分:是指使用一个数据位来表示数值的符号。和用二进制数来表示整数时的符号位时相同的
尾数部分:用的是“将小数点前面的值固定为1的正则表达式”(按照特定的规则来表达数据的形式即为正则表达式)
指数部分:用的则是“EXCESS系统表现”
3.正则表达式和EXCESS系统
尾数部分:
正则表达式:在二进制中,我们使用的是“将小数点前面的值固定为1的正则表达式”。具体来讲,就是将二进制数表示的小数左移或右移(这里是逻辑位移)数次后,整数部分的第1位变为1,第2位之后都变成0(这样是为了消除第2位以上的数位)。而且,第1位的1实际的数据中不保存。由于第1位必须是1,因此,省略该部分后就节省了一个数据位,从而也就可以表示更多的数据范围(虽不算太多)
单精度浮点数的正则表达式的具体例子如下:
0001.01100110000000000000000
指数部分:
EXCESS系统表现:通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示,当指数部分是8位单精度浮点数时,最大值11111111 = 255的1/2,即011111111 = 127(小数部分舍弃)表示的是0,指数部分是11位双精度浮点数时,1111111111 = 2047的1/2,即011111111111 = 1023(小数部分舍弃)表示的是0。
单精度浮点数指数部分的EXCESS系统表现
在实际的程序中进行确认:
1 #include <stdio.h>
2
3 void main(void){
4 float data;
5 unsigned long buff;
6 int i;
7 char s[34];
8
9 //将0.75以单精度浮点数的形式存储在变量data中
10 data = (float)0.75;
11
12 //把数据复制到4字节长度的整数变量buff中以逐个提取出每一位。
13 memcpy(&buff,&data,4);
14
15 printf("%ld\n",buff);
16
17
18 //逐个提取出每一位
19 for (i = 33; i >= 0; i--){
20 if(i == 1|| i == 10){
21 //加入破折号来区分符号部分,指数部分和尾数部分。
22 s[i] = ''-'';
23 }else{
24 //为各个字节赋值‘0’或者‘1’
25 if(buff % 2 == 1){
26 s[i] = ''1'';
27 }else{
28 s[i] = ''0'';
29 }
30 buff /= 2;
31 }
32 }
33 s[34] = ''\0'';
34
35 //显示结果
36 printf("%s\n",s);
37
38 getchar();
39
40 }
输出结果:
1061158912
0-01111110-10000000000000000000000
该程序执行后,十进制数0.75用单精度浮点数来表示就变成了0-01111110-1000000000000000000000表示的就是(+1.5*2的-1次幂)。
CPU中的二进制数据(整数篇)
1.用二进制数表示计算机信息的原因
计算机内部CPU和内存都是IC的一种,它们都有多个引脚。IC的所有引脚,只有直流电压0V或5V两个状态。也就是说,IC的一个引脚,只能表示两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制数来处理。计算机处理信息的最小单位——位,就相当于二进制中的一位。
对于用二进制数表示的信息,计算机不会区分它是数值,文字,还是某种图片的模式等,而是根据编写程序的各位对计算机发出的指示来进行信息的处理。
2.什么是二进制数(略)
3.移位运算和乘除运算的关系
移位运算指的是将二进制数值的各数位进行左右移位的运算。移位有左移和右移两种。
移位操作使最高位或最低位溢出的数字直接丢弃就可以了。
4.便于计算机处理的“补数”
4.1表示负数的方法:
计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算。为此,在表示负数时就使用“二进制的“补数”。补数就是用正数来表示负数。
为了获得补数,我们需要将二进制数的各数位的数值全部取反,然后再将结果加1。原理是:“将二进制数的值取反后加1的结果,和原来的值相加,结果为0”
需要注意的一点:当运算结果为负数时,计算结果的值也是以补数的形式表示的。例如3-5这个运算,用8位二进制数表示3时是00000011,而5=00000101的补数取反加1,也就是11111011。因此3-5其实就是00000011+11111011的运算,运算结果为11111110,最高位变成了1。这就表示结果是一个负数。那么通过求解补数的补数,就可知该值的绝对值。因此11111110的补数,取反加1后为00000010。这个是2的十进制数。因此,11111110表示的就是-2。我们就得到了3-5的正确结果。
5.逻辑右移和算术右移的区别
算术右移:将二进制作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1).这就是算术右移。
只有在右移时才必须区分逻辑位移和算术位移。左移时,无论时图形模式(逻辑左移)还是相乘运算(逻辑右移),都只需要在空出来的低位补0即可。
下面顺便介绍以下符号扩充。以8位二进制数为例,符号扩充就是指在保持值不变的前提下将其转换成16位和32位的二进制数。将01111111这个正的8位二进制数转换成16位二进制数时,很容易就能得出0000000001111111这个正确结果,但是像11111111这样用补数来表示的数值,该如何处理比较好呢?实际上将其表示成1111111111111111就可以了。也就是说,不管时正数还是用补数表示的负数,都只需用符号位的值(0或1)填充高位即可。这就是符号扩充方法。
6.逻辑运算
逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括逻辑非(NOT运算),逻辑与(AND运算),逻辑或(OR运算)和逻辑异或(XOR运算)四种。
对于逻辑运算,我们需要一个整体的把握:
逻辑非:是所有位的取反操作
逻辑与:是将一部分变为0(复位到0)的操作
逻辑或:是将一部分变为1(复位到1)的操作
逻辑异或:是将一部分进行取反(相同取0,不同取1)的操作
c#/ asp.net显示数据库中的二进制数据
我一直在寻找如何从数据库中检索二进制数据。我的查询工作正常,因为它在SQL管理器中显示了二进制数据。
但是在Visual Studio 2010中,它只是向我显示<Binary
Data>
,我个人认为这不是问题,但是如果我尝试检索它并将其存储在变量中,则它只是空的。只要与二进制数据无关,任何其他查询都可以工作…
而且我不想使用数据网格或其他任何东西,因为我只需要将其用作变量。
SqlCommand CMDbinary = new SqlCommand("SELECT Binary_field AS binary "
+ "FROM BIN_table",abc_conn);
SqlDataReader Bin_retriever = CMDbinary.ExecuteReader();
while (Bin_retriever.Read())
{
BIN.Add(Bin_retriever["binary"].ToString());
}
abc_conn.Close();
我知道这不是完整的代码,但这是出问题的地方,我假设我必须做一些特殊的事情才能显示二进制信息,因为(我再说一遍)如果更改Binary_field
为UID
(即一个varchar
在数据库中)。
在此方面的任何帮助都将受到欢迎,在此先谢谢您!
java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?
转换入参字符串waitforsignstring 为二进制数组,编码采用utf-8(java代码如:waitforsignstring.getbyte("utf-8")),得到签名入参的二进制格式数据(waitforsignbytes)。
使用MD5,Sha1或Sha256算法对waitForSignBytes进行摘要签名。得到签名在结果二进制数组数据(signatureBytes)
对签名输出的结果二进制数组(signatureBytes)进行16进制的字符串编码,得到最后的签名字符串(signature)
算法表达式:
String signature = Hex(digest (stringToSign+secretKey)) 其中digest算法可以为:MD5, Sha256Hex
立即学习“PHP免费学习笔记(深入)”;
请问这段签名算法用php应该怎么实现? php的md5似乎没有办法操作数组。。。。
回复内容:
转换入参字符串waitforsignstring 为二进制数组,编码采用utf-8(java代码如:waitforsignstring.getbyte("utf-8")),得到签名入参的二进制格式数据(waitforsignbytes)。
使用MD5,Sha1或Sha256算法对waitForSignBytes进行摘要签名。得到签名在结果二进制数组数据(signatureBytes)
对签名输出的结果二进制数组(signatureBytes)进行16进制的字符串编码,得到最后的签名字符串(signature)
算法表达式:
String signature = Hex(digest (stringToSign+secretKey)) 其中digest算法可以为:MD5, Sha256Hex
立即学习“PHP免费学习笔记(深入)”;
请问这段签名算法用php应该怎么实现? php的md5似乎没有办法操作数组。。。。
在PHP中,字符串是兼容二进制的,并且默认就带有编码形式,如果你的字符串本身是UTF-8编码的,那它就已经是UTF-8的二进制数组了。
PHP中的md5函数可以直接计算字符串(也就是二进制数组)的MD5值,并且默认输出的就是已经转换成16进制的结果。
所以,在Java中捺莫多操作所所要实现的……
在PHP中就是 $md5 = md5(''字符串'');
今天关于MySQL中的二进制数据和mysql的二进制数据类型有什么用?的介绍到此结束,谢谢您的阅读,有关CPU中的二进制数据(小数篇)、CPU中的二进制数据(整数篇)、c#/ asp.net显示数据库中的二进制数据、java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?等更多相关知识的信息可以在本站进行查询。
本文标签: