gpt4 book ai didi

c++ - 如何使用 C++ 获取输入字符串的十六进制值?

转载 作者:行者123 更新时间:2023-12-02 05:01:23 27 4
gpt4 key购买 nike

我刚刚开始使用 C++,几周后我发现 C++ 不支持将字符串转换为十六进制值的方法或库。目前,我正在研究一种方法,该方法将返回以 UTF16 编码的输入字符串的十六进制值。为了更容易理解我想要做什么,我将展示我在 Java 中所做的事情。

Charset charset = Charset.forName("UTF16");
String str = "Ồ";
try {
ByteBuffer buffer = charset.newEncoder().encode(CharBuffer.wrap(str.toCharArray()));
byte[] bytes = new byte[buffer.limit()];
buffer.get(bytes, 0, buffer.limit());
System.out.println("Hex value : " + bytes); // 1ED2
}
catch (CharacterCodingException ex) {
ex.printStackTrace();
}

我尝试用 C++ 做什么:

std::string convertBinToHex(std::string temp) {
long long binaryValue = atoll(temp.c_str());
long long dec_value = 0;
int base = 1;
int i = 0;
while (binaryValue) {
long long last_digit = binaryValue % 10;

binaryValue = binaryValue / 10;

dec_value += last_digit * base;

base = base * 2;

}
char hexaDeciNum[10];
while (dec_value != 0)
{
int temp = 0;
temp = dec_value % 16;
if (temp < 10)
{
hexaDeciNum[i] = temp + 48;
i++;
}
else
{
hexaDeciNum[i] = temp + 55;
i++;
}
dec_value = dec_value / 16;
}
std::string str;
for (int j = i - 1; j >= 0; j--) {
str = str + hexaDeciNum[j];
}
return str;
}

void strToBinary(wstring s, string* result)
{
int n = s.length();
for (int i = 0; i < n; i++)
{
wchar_t c = s[i];
long val = long(c);
std::string bin = "";
while (val > 0)
{
(val % 2) ? bin.push_back('1') :
bin.push_back('0');
val /= 2;
}
reverse(bin.begin(), bin.end());
result->append(convertBinToHex(bin));
}
}

我的主要功能:

 int main()
{
std::string result;
std::wstring input = L"Ồ";
strToBinary(input, &result);
cout << result << endl;// 1ED2
return 0;
}

虽然我得到了预期的值,但是还有其他方法吗?任何帮助将非常感激。提前致谢。

最佳答案

这确实很难看,可以简化,但至少是一个改进。如果我不在移动设备上,我会提供更好的东西。

auto buf = reinterpret_cast<uint8_t*>(input.data());
auto sz = (input.size() * sizeof(wchar_t));

for (size_t i = 0; i < input.size() * sizeof(wchar_t); ++i)
{
char p[8] = {0};
sprintf(p, "%02X", buf[i]);
output += p;
}

这对于字节数组来说并不重要,但如果你想以 wchar_t 的形式进行迭代,那就更容易了。

for (const auto& i : input)
{
char p[8] = {0};
sprintf(p, "%04X", i);
output += p;
}

关于c++ - 如何使用 C++ 获取输入字符串的十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com