2008年7月22日 星期二

memory address and Little-Endian

最近看了一些有關 Big-Endian 與 Little-Endian 的資料,就寫個小程式觀察一下

編譯環境:Windows XP、minGW

#include <stdio.h>
#include <limits.h>

int main(){

long a,b[6];
printf("int max =%d\tlong max=%d\n\n",INT_MAX,LONG_MAX);
printf("address of variables(a defined first):\n");
printf("b[0]\tb[1]\tb[2]\n%u\t%u\t%u\n\n",&b[0],&b[1],&b[2]);
printf("b[4]\tb[5]\ta\n%u\t%u\t%u\n\n",&b[4],&b[5],&a);

a=0x1234abcd;
printf("about endian:\n\n");
printf("set a's value = %x\n\n",a);
unsigned char *ptr;
ptr=(unsigned char *)&a;
printf("value store in the bytes of a\n1st\t2nd\t3rd\t4th\n");
printf("%x\t%x\t%x\t%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3));

return 0;
}



學到的幾點:
  1. 這個編譯環境下,int 與 long 最大值相同 ( C90 的 INT_MAX 為 32,767),所使用 byte 數也相同。
  2. 變數的記憶體位址是後宣告的在前面,而且有些沒有用到 (可見參考網頁)。
  3. 目前大部分的 CPU 都是使用 Little-Endian
參考網頁
用 C 語言窺探記憶體
http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml

2008年7月12日 星期六

預設一開機便自動登入某帳號 ( Windows XP )

1. 開始 -> 執行 -> 「control userpasswords2」

2. 先選取要登入的帳號

3. 取消 「必須輸入使用者名稱和密碼,才能使用這台電腦」

4. 點選「套用」

另外發現,在「cmd」 下輸入此指令也可運作,輸入「control」則會出現「控制台」。

2008年7月7日 星期一

828 Deciphering Messages

題目網頁:http://acm.uva.es/problemset/v8/828.html

莫名其妙卡很久的題目,照題意不難解,只是有些例外要多想一下。

Sample Input:
3

RSAEIO
2
5
RTSSKAEAGE
GRSCAV
RGSSCAV
RUSIQO
RUSSGAACEV JEGIITOOGR

AABBCCDDEEFFGHVXYZ
28
3
AJAAGBNNQ
AAAACBBJBQQ
AZAAABBBB

ABC
5
3
AFBBFCCFA
AXB
AFBBFCCFAAFBBFCCFAAFBBFCCFA

Sample Output:

RICE
error in encryption
EAT
error in encryption
SEAT HERE

HELLO
YAHOO
XYZ

AAA
VSW
AAAAAAAAA