【发布时间】:2018-10-31 15:20:28
【问题描述】:
我有以下函数支持将 LPCTSTR 转换为 BYTE ,但输入 str 目前仅支持数字。
void StrToByte2(LPCTSTR str, BYTE *dest)
{
UINT count = _ttoi(str);
BYTE buf[4] = { 0 };
char string[10] = { 0 };
sprintf_s(string, 10, "%04d", count);
for (int i = 0; i < 4; ++i)
{
if ((string[i] >= '0') && (string[i] <= '9'))
buf[i] = string[i] - '0';
}
dest[0] = (BYTE)(buf[0] << 4) | buf[1];
dest[1] = (BYTE)(buf[2] << 4) | buf[3];
}
如果我在“1234”(任何数字)上调用此函数,dest 输出一些 12814,
struct st
{
byte btID[2];
int nID;
};
PTR ptr(new st);
StrToByte2(strCode, ptr->btID);
但是当我在任何十六进制 ex A123 上调用此函数时,它总是输出 0000。
下面的函数用于将dest代码转换回str
CString Byte2ToStr(const byte* pbuf)
{
CString str;
str.Format(_T("%02X%02X"), pbuf[0], pbuf[1]);
return str;
}
如何将 A123 转换为字节,然后返回 str 以显示 A123? 请帮忙!!
【问题讨论】:
-
所以你希望函数能够处理hexa-decimal数字?
-
顺便说一下,了解the standard character classification functions 可能是一个好的开始。更具体地说是
isxdigit和isdigit(以及例如toupper)。 -
"如果我在 "1234" (任何数字) 上调用此函数,dest 输出显示 1234" 这不是真的,你的函数不会那样做。首先,告诉我们您是否使用 Unicode(检查项目设置 -> 字符集)。描述您正在考虑的问题和解决方案。放置一个
printf函数来显示输出。我的猜测是您正在尝试convert hexadecimal string to bytes -
无论你做什么,
union都是未定义行为的前兆。看看this Q&A。 -
您使用的联合有一个很大的危险信号:它似乎在数组和
WORD变量之间尝试type punning。在 C++ 中,这是不允许的并导致 undefined behavior。在 C++ 中,您必须读取最后写入的联合成员。
标签: c++ string winapi visual-studio-2017 byte