我有一个像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* ?
答案 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字符)。
'希望有所帮助!