我在内存中有一个unsigned const char*
缓冲区(来自网络)我需要做一些事情。现在让我感到困惑的是,我需要将前两个字节解释为二进制数据,而其余的是ASCII。我没有读取ASCII的问题(我认为),但我无法弄清楚如何只读取无符号数组的前两个字节,并将它们转换为(比方说)一个int。我打算使用reinterpret_cast
,但前两个字节不是以空值终止的,而我能找到的唯一其他帮助就是文件IO。
简而言之,我有{0000000000001011}ABC Z123 XY0 5
之类的东西,其中大括号外的字符被读为ASCII,而里面的字符应该是一个二进制数,即11)。
答案 0 :(得分:1)
int c1 = buffer[0];
int c2 = buffer[1];
int number = c1 << 8 + c2;
unsigned char* asciiData = buffer+2;
答案 1 :(得分:1)
我真的不明白为什么字节必须是&#34;空终止&#34;你可以使用reinterpret_cast。我会做什么(目前在我的项目中工作)是:
uint16_t first_bytes = *(reinterpret_cast<const uint16_t*>(buffer));
这样可以获得缓冲区中的前两个字节,并将值赋给first_bytes
变量。