encoding - 将 std::string 从 UTF8、UTF16、ISO88591 转换为十六进制
问题描述
我尝试将 std::string 从 UTF8,... 编码为十六进制。我现在不能做的是,如果输入字符串包含来自代码页标识符(windows-1258)的特殊字符,我无法获取输入字符串的每个字符的十进制值来转换它包括越南字符.
首先,我将获取十进制值,然后将其转换为二进制,然后再转换为十六进制。s 是我的输入字符串。s = "Ồ"。
void StringUtils::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));
}
}
std::string StringUtils::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;
}
如果我的输入仅包含“Ồ”,这就是我的预期输出
UTF8 : E1BB92
UTF16 : FEFF 1ED2
UTF16BE : 1ED2
UTF16LE : D21E
这就是我在 Java 中的做法
Charset charset = Charset.forName(Enum.valueOf(Encoding.class, encodingType).toString());
ByteBuffer buffer = charset.newEncoder().encode(CharBuffer.wrap(inputString.toCharArray()));
byte[] bytes = new byte[buffer.limit()];
buffer.get(bytes, 0, buffer.limit());
result = new ByteField(bytes);
return result;
}
解决方案
推荐阅读
- c++ - 是否有预处理器方法可以从调试符号中删除代码段?
- vba - 格式 - 预期的数组
- r - 使用 scale_fill_gradientn 将特定颜色分配给条形图中的确定值
- ios - Xcode 11.2 场景编辑器是否允许添加组件?
- excel - Excel VBA 从域中获取 IP 地址
- reactjs - 浅渲染返回空对象,wrapper.debug() 显示完全渲染的组件
- .net - 如何在服务器 ubuntu 18.04.3 LTS 上启动 PuppeteerSharp?System.ComponentModel.Win32Exception (13):权限被拒绝
- php - 当woocommerce中的产品数量增加/减少时,如何从商店页面更新购物车?
- ruby-on-rails - 链式 ruby on rails 查询返回那些不是 nil 的
- sql - 没有标识列时删除重复值