忠忠的新百宝袋

做人要厚道

Archive for October, 2008

买了两本书

Posted by Kai on 24th October 2008

上周五在卓越买了两本书,一本是《小猪虾米夫妻日记》,一本是《大便书》。

小猪虾米日记,看看就很羡慕。不说了。

大 便书,挺有意思的,看到一个很有趣的观点,解释了为什么我每次在图书馆呆了没多久就会想便便的问题。因为树木为了获得更多的养分,在进化中获得了一种能 力,它们会释放一种化学物质在空气中,在树木附近的动物闻到了会促进排泄。因为书本是树木制造的,所以也具有释放这种化学物质的能力,在图书馆里这种化学 物质的浓度会比较高。

这也解释了为什么有人便便的时候或者喜欢拿着本书,或者看报纸,有人干脆在厕所的水箱上放几本书,以备不时之需。

Posted in personal | No Comments »

传说中的酒吧

Posted by Kai on 12th October 2008

周五,晚,20:30,田子坊,公社,我进去过的第一个酒吧,还是蛮有新鲜感的。

露天的小四合院,一席人围着坐,大部分人选择啤酒,女士和小部分男士选择果汁。啤酒是小瓶装,直接用瓶子喝,味道和普通的啤酒一样,苦的。

店不大,我们人多,差点连凳子都不够用。

Posted in Uncategorized | No Comments »

低字节的高位和高字节的低位是不是连续的

Posted by Kai on 9th October 2008

我今天才明白字节中的位的顺序,低位的地址在高位前面。这个看起来很容易的结论,我混淆了很久。

因为我们平时的微操作中,右移是变大,左移是变小,并且在用十六进制或者二进制表示一个数字的时候,都是高位在左边,低位在右边,所以我一直以为在一个字节里面,最低地址的位,是低7位,最高的是0.

比 如一个字节的大小是1,那么我以前的理解是在这个字节里面位的排列是(p)00000001(p+1)00000000,与二进制表示方法 B00000001一样。因为我平时画内存模型的时候,都是左边用小地址,右边是大地址,比如一个数组,4个元素,我会用||p|| p+1||p+2||p+3||。

今天看了一个MSDN上关于DTX5的编码格式的说明,里面提到了一个block里面的alpha数据的保存,

Byte Alpha
0 Alpha_0
1 Alpha_1
2 [0][2] (2 MSBs), [0][1], [0][0]
3 [1][1] (1 MSB), [1][0], [0][3], [0][2] (1 LSB)
4 [1][3], [1][2], [1][1] (2 LSBs)
5 [2][2] (2 MSBs), [2][1], [2][0]
6 [3][1] (1 MSB), [3][0], [2][3], [2][2] (1 LSB)
7 [3][3], [3][2], [3][1] (2 LSBs)

顿时很奇怪,因为按照第[0][2]个像素的alpha数据有两个位是在第2个字节的高位,有1个位是在第3个字节的最低位。但是如果高位在左边的话,这两个存储就不是连续的。

为了确定高位到底是在哪边,于是我做了1个实验。
unsigned char  B[2];
B[0] = (unsigned char)(0×80);
B[1] = (unsigned char)(0×01);
unsigned short S = *((unsigned short*)(B));
cout<<S<<endl;
低字节是B1000 0000, 高字节是B0000 0001, 合成的双字节如果是B0000 0001 1000 000那就说明低字节的高位和高字节的低位是连续的, 否则,如果合成的双字节是B0000 0001 0000 0001就表示不是连续的。

结果表明,低字节的高位和高字节的低位是连续的。

好像我自己说着说着有点乱了。。。。

Posted in Uncategorized | No Comments »

一个调试的小方法

Posted by Kai on 9th October 2008

我有一个程序,是非控台程序,我需要看到程序运行过程中的一些变量的值,但是我不想用断点停下程序。因为程序是有窗口的不断运行的,所以我需要在程序运行过程中看到某些变量的值,根据看到的结果我可以做出一些操作,之后再看到结果。

今天碰巧想到了一个小方法,用起来还挺方便。实践了一下,也不麻烦。

首先,在代码里面,把要监视的数据用文件流输出到一个文件,比如watch.txt

第二,写一个相应的bash脚本,不停的检测watch.txt的大小有没有改变,如果有改变,输出watch.txt的最后几行,行数看需要。

这个bash脚本很容易,寥寥几行。

PRE=”"
NOW=”"
FILE=”output.txt”
NO=0
echo “Watch $FILE”
while [[ 1 ]];
do
PRE=$NOW
NOW=`stat $FILE | grep -i size`
if [[ "$PRE" != "$NOW" ]];
then
clear
echo ——————- $NO ——————–
cat $FILE
let NO=$NO+1
echo
else
sleep 0.2#停顿一会,避免繁忙等待占用过多的cpu资源
fi
done
接下来,需要使用Cygwin,启动一个bash shell,调用那个bash脚本就可以了。

实验了一下,效果非常的好,就仿佛在运行中把visual studio的watch窗口拿出来一样,这样我可以同时在桌面上显示调试程序的窗口和cygwin shell窗口,用鼠标操作调试程序,同时看到某些变量的值的变化。

不一定用bash,用python,perl等等其他脚本语言也能做到,而且还可以做的更加强大。我用bash只是因为bash在linux上是比较通用的脚本语言。

Posted in tech | No Comments »

 
FireStats icon Powered by FireStats