二进制到十六进制转换不工作
Binary to hexadecimal conversion does not work
当尝试将二进制转换为十六进制时,我在JavaScript和c++中得到错误的结果。
这是我的PHP代码:$f = bin2hex("l¬");
echo $f;
输出为
6cc2ac
在JavaScript中,我使用这个函数:
function bin2hex(s){
var i,f =s.length, a =[];
for(i =0;i<f;i++){
a[i] = s.charCodeAt(i).toString(16);
}
return a.join('');
}
输出为
6cac
下面是c++代码:
std::string bin2hex(const std::string& s)
{
const static char bin2hex_lookup[] = "0123456789abcdef";
unsigned int t=0,i=0,leng=s.length();
std::stringstream r;
for(i=0; i<leng; i++)
{
r << bin2hex_lookup[ s[i] >> 4 ];
r << bin2hex_lookup[ s[i] & 0x0f ];
}
return r.str();
}
用
调用函数cout << bin2hex("l¬") << endl;
打印
6c c
JavaScript和c++版本的问题是什么?为什么它们会产生不同的结果?
hex
值将取决于所述字符串的编码。PHP假设它是UTF-8。ES将字符串定义为UTF-16:
基本值,为0个或多个16位无符号整数的有限有序序列
说明String值是String类型的成员。序列中的每个整数值通常代表一个单独的16位UTF-16文本单元。但是,ECMAScript对这些值没有任何限制或要求,除了它们必须是16位无符号整数。
所以它可以使用UTF-16 (UCS-2也是16位,但不允许使用代理访问其他平面)。
无论如何,¬
的UTF-16十六进制表示为00AC
。这就是为什么会得到AC
。我不知道c++,但我的猜测是每个字符也被视为UTF-16(或UCS2)。
这是我写的一个十六进制到整数的转换器,要将十六进制字符串转换为整数,你真的只需要做相反的事情,或多或少。我可以写一个从整数到十六进制字符串的转换器,如果你想:)
long HexaDigitToDecimalDigit(char ch)
{
switch(ch) {
case '0': return 0; break; case '1': return 1; break;
case '2': return 2; break; case '3': return 3; break;
case '4': return 4; break; case '5': return 5; break;
case '6': return 6; break; case '7': return 7; break;
case '8': return 8; break; case '9': return 9; break;
case 'A': return 10; break case 'B': return 11; break
case 'C': return 12; break
case 'D': return 13; break case 'E': return 14; break
case 'F': return 15; break
default:return 0; }
}
// Hexstrings are normal /0 terminated strings
long HexToDec(char* pchHexStr)
{
long lTemp = 0;
long lMultiPlier = 1;
int i = 0;
while (pchHexStr[i] != ' ')
{
lTemp += HexaDigitToDecimalDigit(pchHexStr[i]) * lMultiPlier;
i++;
lMultiPlier *= 16;
}
return lTemp;
}
相关文章:
- 如何定义在用作函数参数时工作的类模板的转换
- 将双精度值转换为 char 变量时字符串流如何工作
- 隐式转换是否应该在模板参数的上下文中工作?
- strcmp/char* 转换无法按预期工作
- 如何在 Poco 中将工作 HTTP 代码转换为 HTTPS
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 将缓冲区转换为在现有程序中工作的iStream
- 更新MySQL连接器后,隐式转换停止工作
- 为什么Arduino(小端序)上的Sha1在没有转换为大端序的情况下工作?
- 如何使转换功能工作?
- 以下对二进制转换代码的小数如何工作
- 隐式转换未按预期工作
- 尝试将工作python程序转换为C++但不起作用
- 字符串到字符指针的转换如何在C++中工作
- 如何将负数转换为更广泛的类型在内部工作
- 十六进制、二进制和 oct 到 dec 转换器无法正常工作C++
- 使用模板无法按预期工作进行继承和强制转换
- 超级强大:实时音调转换,时间扩展器不工作