我创建了一个函数来计算传入十六进制字符串的字节长度,然后将该长度转换为十六进制。它首先将传入字符串的字节长度分配给一个 int,然后我将 int 转换为一个字符串。将传入字符串的字节长度分配给一个 int 后,我检查它是否超过 255,如果是,我插入一个零,以便返回 2 个字节,而不是 3 位。
我执行以下操作:
1)输入十六进制字符串并将数字除以 2。
static int ByteLen(std::string sHexStr)
{
return (sHexStr.length() / 2);
}
2)接收十六进制字符串,然后使用 itoa() 转换为十六进制格式字符串
static std::string ByteLenStr(std::string sHexStr)
{
//Assign the length to an int
int iLen = ByteLen(sHexStr);
std::string sTemp = "";
std::string sZero = "0";
std::string sLen = "";
char buffer [1000];
if (iLen > 255)
{
//returns the number passed converted to hex base-16
//if it is over 255 then it will insert a 0 infront
//so to have 2 bytes instead of 3-bits
sTemp = itoa (iLen,buffer,16);
sLen = sTemp.insert(0,sZero);
return sLen;
}
else{
return itoa (iLen,buffer,16);
}
}
我将长度转换为十六进制。这似乎工作正常,但是我正在寻找一种更简单的方法来格式化文本,就像我在 C# 中使用 ToString("X2") 方法一样。这是用于 C++ 还是我的方法足够好?
以下是我在 C# 中的操作方式:
public static int ByteLen(string sHexStr)
{
return (sHexStr.Length / 2);
}
public static string ByteLenStr(string sHexStr)
{
int iLen = ByteLen(sHexStr);
if (iLen > 255)
return iLen.ToString("X4");
else
return iLen.ToString("X2");
}
我的逻辑在 C++ 中可能有点偏离,但是 C# 方法对于我想做的事情来说已经足够好了。
感谢您的时间。