最近研究研究mysql,写个小程序读取一下MySQL的binlog日志,探究一下其中的结构,没想到这么困难,折腾了好几个晚上。
首先对于英文的mysql文档,期初看起来真是不习惯,其中的含义真是琢磨不同,以为是自己理解的失误导致程序出错,但实际上是c++方面太薄弱。
这里遇到了几个问题:
1.字节序
虽说网上的有一篇文章说是小端存储,但是实际上,读二进制的整数时,还是出了问题。这个问题好解决,自己转一下就OK了,但是有出现了一个新问题
2.char类型相加
因为char类型是c/c++编程语言的最小单位,所以提供的api都是以char为单位的,但是我们定义需要读的数的时候,定义成
char a = 0;
这样的话就有问题了,当赋值给int变量的时候,就会发生问题,此时已然保持了其有符号特性,如
char x = 155;
int y.= x;
这里,y是负数,而不是正数,为了能够正确得到结果,需要
char x = 155;
int y = (int)x;
这样就能得到准确的正数了。
这里能够看出,c++严格定义了有符号数的加法和无符号数的加法和赋值语句。精度有可能随着赋值的操作,或转型操作,导致符号丢失或保留。