【发布时间】:2017-04-25 00:37:39
【问题描述】:
我有一个十六进制 ASCII 格式 [3x3x3x3x] 的字符串,变量 x, x-(0...F)。
例如我可以获取数据
inData = 0x30303f3f 并希望将其转换为:
outData = 0x00ff
或
inData = 0x3f3f3f3f
outData = 0xffff
这里如何进行位操作最好,我真的只想跳过“3s”吗?
// receive answer from device
if (ReceiveMsg(FLog, TLog::INFO, FSerial, &ReceiveStr))
{
int side;
char inData[4];
char serial[6];
char status;
if (sscanf(ReceiveStr.GetData(), "\x2%6s\x84%1d%4c%c", &serial, &side, &inData, &status) == 4) {
*Status = status & 0x0f;
// decode hex ASCII
int time = 0;
int j = 0;
for (int i = 3; i >= 0; i--) {
time = time + ((inData[i] & 0x0f) *(pow(16, j)));
j++;
}
*Timer = time;
result = true;
}
}
- inData[4] = 0x30, 0x30, 0x3f, 0x3f
- 时间 = 255(输出)
我想知道是否有任何方法可以更快地完成 for 循环的工作,例如位移或类似?
【问题讨论】:
-
显示您尝试过的内容。
-
输出仍然是字符串还是您也想解析它?你是否允许
_pext_u32或_mm_shuffle_epi8之类的东西? -
这毫无意义。
0x30303f3f不是0x00ff,0x3f3f3f3f不是0xffff -
你需要一个值而不是四个。你可以做` union { char w[4];单位吨; } h;
-
如果你不知道 "
标签: c bitmap hex bit-manipulation bit