2015-04-23 46 views
1

有沒有方法可以將* char數組的打印元素手動執行爲十六進制值,而不引入循環或通過增量影響指針?手動打印char *的單個值而不循環或遞增

它不應該添加引入額外的變量,改變當前值,並應該是一個oneliner printf/printk/...

+0

這聽起來並不 「簡單」 的。您應該添加更多的上下文來澄清不修改指針的非常奇怪的要求。如果在編譯時未知數組長度,將很難避免循環。 – unwind

+0

「簡單」調試打印是什麼意思? – Eregrith

回答

0

下面的代碼可用於參考。

#include<stdio.h> 

main() 
{ 
    char buf[3] = {0xa, 13, 'a'}; 
    printf("%x \n", *buf);   # a 
    printf("%x \n", *(buf+1));  # d 
    printf("%x \n", *(buf+2));  # 61 

    printf("%x \n", *buf);   # a 
} 
1

沒有循環,指針和大小實際上不變參數:

void fun(char * ptr, uint idx, uint size) 
{ 
    if(idx < size) 
    { 
     printf("% 2x\n", (unsigned char) (ptr[idx])); 
     fun(ptr, 1 + idx, size); 
    } 
} 

實例調用:

char ray[] = { 0xca, 0xff, 0xee, 0x00 }; 
fun(ray, 0, sizeof(ray)/sizeof(ray[0]));