项目里面有个需求,把Http请求里面的内容转换为十六进制格式输出,找了相关资料后,写了如下方法:
function stringToHex(str){
var val = "";
var idx = 0;
if(typeof(str) === "undefined" || str == ""){
return "";
}
for(var i = 0; i < str.length; i++){
var hex = str.charCodeAt(i).toString(16);
if(hex.length == 1){
val += " 0" + hex;
idx = idx + 1;
}else if(hex.length == 4){// 汉字特殊处理
val += " " + hex.substr(0,2) + " " + hex.substr(2,2);
idx = idx + 2;
}else{
val += " " + hex;
idx = idx + 1;
}
if(idx==32){// 满32个字符换行输出
val += "<br/>";
idx = 0;
}
}
return val.toUpperCase();// 统一大写格式输出
}
输出之后,还有单个字符格式不对齐问题,比如字符"1"和"8"的宽度不一样。这时候,我们只要设置一下字体为等宽字体,就可以解决对齐问题:
<font id="respBodyHex" style="font-family: Consolas, Monaco, monospace;"></font>