从字节[]中读取字符串

时间:2012-12-24 23:34:59

标签: c++

我有一个像0x21, 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33这样的字节数组,它包含长度为3的ascii字符串"123"(string starts at 0x03, 0x31, 0x32, 0x33) 我正在学习,那么有人能告诉我如何从中获取输出"123"并将其放在char*内吗?非常感谢

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

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

2 个答案:

答案 0 :(得分:2)

如果您有BYTE类型的字符大小的数据:

#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;
}

答案 1 :(得分: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;
} 

示例输出:

  

抛光轮=!123

你会注意到“0x21”是一个可打印的字符(“!”)。您可以使用“isalpha()”或“isalnum()”来代替“isprint()”(是可打印的ASCII字符)。

'希望有所帮助!