2012-12-24 52 views
1

我有一個字節數組,如0x21, 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33其containts的ASCII字符串"123"與3 (string starts at 0x03, 0x31, 0x32, 0x33) 的長度我學習,所以會有人能告訴我如何得到輸出"123"從它,並把它放在char*?非常感謝閱讀的String []

   BYTE Data[] = { 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33 }; 
       int Length = Data[2]; 

       //Extract string "123" from Data and store as char* ? 
+2

C++不具有'字節[]'秒。請告訴我們你的代碼。 – SLaks

+0

你在哪裏保留字節?將其轉換爲char *,最後加上0。 – perreal

+0

對不起,我的問題更新了 – Dean

回答

2

如果在BYTE類型char大小的數據:

#include <iostream> 
typedef unsigned char BYTE; 
BYTE Data[] = { 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33 }; 

int main() { 
    std::string str(reinterpret_cast<char*>(Data) + 3, 3); 
    std::cout << str << std::endl; 
    const char * c = str.c_str(); 
    std::cout << c << std::endl; 
    return 0; 
} 
+0

這當然假設ASCII數據從位置3開始。一個有效的假設?我不知道... – paulsm4

0

下面是一個例子:

#include <windows.h> // typedef for BYTE 
#include <stdio.h> 
#include <ctype.h> // isnum(), isalpha(), isprint(), etc 

BYTE bytes[] = { 
    0x21, 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33 
}; 

#define NELMS(A) (sizeof(A)/sizeof(A[0])) 

int 
main(int argc, char *argv[]) 
{ 
    char buff[80]; 
    for (int i=0, j=0; i < NELMS(bytes); i++) { 
     if (isprint(bytes[i])) { 
     buff[j++] = bytes[i]; 
     } 
    } 
    buff[j] = '\0'; 
    printf ("buff=%s\n", buff); 
    return 0; 
} 

輸出示例:

BUFF = 123

你會發現, 「0×21」 是可打印字符(「!」)。而不是「isprint()」(是一個可打印的ASCII字符),您可以改爲使用「isalpha()」或「isalnum()」。

'希望有幫助!

+0

謝謝你的回覆,buff可以有字節的大小嗎? – Dean

+0

是的,我給你的NELMS(編譯時)宏可用於設置緩衝區大小,例如, 'char buff [NELMS(bytes)+1];' – paulsm4