1

長さ30x21, 0x0D, 0x01, 0x03, 0x31, 0x32, 0x33の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* ?
4

2 に答える 2

2

バイト型の 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;
} 

出力例:

バフ=!123

「0x21」は印刷可能な文字 (「!」) であることがわかります。「isprint()」(印刷可能な ASCII 文字) の代わりに、「isalpha()」または「isalnum()」を代わりに使用できます。

「お役に立てば幸いです!

于 2012-12-24T23:45:26.240 に答える