1

我有一个字节数组,例如它包含长度为 30x21, 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33的 ascii 字符串。 我正在学习,那么有人能告诉我如何从中获取输出并将其放入 a 中吗?非常感谢"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* ?
4

2 回答 2

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;
}
于 2012-12-24T23:47:49.977 回答
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

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

'希望有帮助!

于 2012-12-24T23:45:26.240 回答