2015年6月9日 星期二

C語言 - how to check big or little endian

Q: big endian vs little endian, how to check ?

sample code:
int main(void)
{
    short int a = 0x1234;
    char *p = (char *)&a;
   
    printf("p=%#hhx\n",*p);

    if(*p == 0x34)
        printf("Little endian \n");
    else if(*p == 0x12)
        printf("Big endian \n");
    else
        printf("Unknow endian \n");

    return 0;
}

C語言 - sizeof(), strlen()


static void tim_test(void)
{
    char str1[]="12345\n";
    char *p1=str1;

    UINT8 a,b,c,d,e;

    a=sizeof(str1);
    b=sizeof(p1);
    c=sizeof(*p1);

    d=strlen(str1);
    e=strlen(p1);

    libc_printf("%s(): a=%u, b=%u, c=%u, d=%u, e=%u \n",__FUNCTION__,a,b,c,d,e);
 
}

/*
sizeof(str1)=? 7  ("有"包括terminated null character)
sizeof(p1)=?  4 (指標變數)
sizeof(*p1)=? 1   char型態的指標 1 byte
*/

--
程式輸出:
tim_test(): a=7, b=4, c=1, d=6, e=6

C語言 - printf str pointer

void tim_test_str_printf(void)
{
    char *str = "abcde";

    libc_printf("%s(): str = %s, *str=%c \n",__FUNCTION__,str,*str);

}

/*
*str --> 1 byte, char型態的指標
%s: 印出string
%c: 印出一個character
*/


程式輸出:
tim_test_str_printf(): str = abcde, *str=a

--
面試被問到 紀錄一下