2017-09-23 82 views
0

檢查的緩衝區我的話題新手,我有unsinged char *buffer通過結構

我試圖在同一時間

我想,這也許可以用一個2維數組來解決在3個字節來檢查它。

所以我嘗試這 -

unsigned char *bytes[3] = {}; 
*bytes = buffer; 

但我看到,這是一個符號來創建類型unsigned char *

的3個元素的數組是沒有什麼辦法來實現此,而不必memcpy

任何指針都非常感謝。

這種做法似乎工作

typedef struct utf8 { 
    unsigned char bytes[3]; 
}; 

typedef struct utf8 utf8x; 

utf8x *xx = (utf8x *) buffer; //buffer is a return from fread (unsinged char *) 

if (xx->bytes[0] == 0xe0) { 
    printf("scratch"); 
} 

但是我仍然在試圖找出如何比較所有字節,我想,如果我投XX->字節返回3個字節​​它應該工作。

+0

嘗試收緊你的問題。現在很亂,不清楚。你永遠不會解釋或給出一個在這種情況下「表查找」的例子。 –

+0

@JohnZwinck它降低到範圍 – DevZer0

+0

我拿着查詢表引用了自其在此方面不原始的事,因爲混亂 – DevZer0

回答

2

你要一次比較三個字節的緩衝區中。爲此,您可以使用memcmp()(其中一個很好的編譯器將優化出來,所以沒有實際的函數調用)。例如:

utf8x *xx = (utf8x *) buff; 

if (memcmp(&xx->bytes[0], "\100\50\10", 3) == 0) { 
    printf("scratch"); 
} 

,將打印scratch如果前三個字節是\100 \50 \10

+0

啊好,謝謝約翰,所以關鍵是'memcmp'好的非常感謝你!所以結構它自己不能不使用memcmp比較? – DevZer0