Javascript.RU

PHP-функция: bin2hex

Javascript:

function bin2hex(s){	// Convert binary data into hexadecimal representation
	// 
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)

	var i, f = s.length, a = [];
	for(i = 0; i<f; i++){
		a[i] = s.charCodeAt(i).toString(16);
	}
	return a.join('');
}

Примеры:

bin2hex('Kev');
'4b6576'


Автор: dragon-dragon (не зарегистрирован), дата: 17 января, 2009 - 09:25
#permalink

Взял с помощью здешнего file_get_contents() бинарник изображения.
Привёл к хексу данной функцией.

Сравнил с результатом, полученным в php.
Javascript выдал отличающийся результат (неверный).

Это недоработка данной функции, или жабаскрипт категорически не приемлет бинарные данные (не интерпретирующиеся как символы)?


Автор: kirilloid (не зарегистрирован), дата: 4 июня, 2009 - 19:52
#permalink

Для символов с кодами 0—15
s.charCodeAt(i).toString(16) даст одну шестнадцеричную цифру, а не две.

Насчет следуюшего не уверен, но тоже может давать ошибки:
В js все строки считаются в utf-8. Произвольные бинарные данные не являются utf-8 совместимыми.


Автор: Ринат Ибрагимов, дата: 5 июля, 2010 - 20:07
#permalink
a[i] = s.charCodeAt(i).toString(16).length<2?'0'+s.charCodeAt(i).toString(16):s.charCodeAt(i).toString(16)

Автор: MainBuh, дата: 18 ноября, 2010 - 10:11
#permalink

Я бы предложил такой вариант замены PHP функции bin2hex, а так же аналогичных в других языках: hex2bin(), hex2dec(), dec2hex, oct2dec() и так далее и тому подобное:

Number.prototype.convert=String.prototype.convert=function(outRadix, inRadix){
/*
Параметры: 
   - на входе число или строка, представляющая собой число
   - outRadix - система исчисления в которую надо преобразовать входные данные
   - inRadix (необязательный) - система исчисления в которой представлены входные данные (по умолчанию - 10 - в десятичной)
Примечание: Функция объединяет в себе множество функций известных как:
		- hex2dec() - "ff".convert(10,16);  	//=255 
		- dec2hex() - (255).convert(16);		//=FF
		- bin2hex() - "100000".convert(16,2); //=2F
		- hex2bin() - ('2F').convert(2,16);		//=100000
		- oct2dec() - ('10').convert(10,8);		//=8
		и т.д. и т.п.
Возвращает: false - в случае ошибки
Примечание: Если входные данные не соответствуют системе исчисления указанной в inRadix (в т.ч. по умолчанию) - будет выдана ошибка.
Например: 
   - 'FF'.convert(<любая>,10); //-в десятичной системе нет числа FF
   - '8'.convert(<любая>,8);		//-в восмеричной системе нет числа 8
*/
	var val=this, outRadix=parseInt(outRadix), inRadix=parseInt(inRadix || 10), retVal;
	if(typeof(val)=='string') val=val.replace(/(^ *| *$)/g,'')
	function dec2x(val){
		var val=val, retVal;
		val=(typeof(val)!='number') ? parseInt(val) : val;
		retVal=parseInt(val).toString(outRadix);
		return retVal;
	}
	function x2dec(val){
		var val=String(val), retVal;
		retVal=parseInt(val, inRadix);
		return retVal;
	}
	
	if(inRadix==10){//10->x
		retVal=dec2x(val);
		if(outRadix==16) retVal=retVal.toUpperCase();
	}else if(outRadix==10){//x->10
		retVal=x2dec(val);
	}else{//x->10->x
		retVal=x2dec(val);
		retVal=dec2x(retVal);
	}
	return (retVal=='NaN' || retVal===false)? false : retVal;
}

Автор: vasa_c, дата: 23 января, 2011 - 13:48
#permalink

Зачем столько ветвлений? Можно сразу универсальную сделать.

/**
 * Преобразование системы счисления
 *
 * @example convertNS("F5", 16, 2); // 11110101
 *
 * @param string number
 *        исходная запись числа (в СС from)
 * @param number from
 *        исходная система счисления
 * @param number to
 *        итоговая система счисления
 * @return string
 *         итоговая запись числа (в СС to)
 */
function convertNS(number, from, to) {
    return parseInt(number, from).toString(to);
}

Автор: Гость (не зарегистрирован), дата: 15 января, 2013 - 15:57
#permalink

bin2hex = function(bin){// UTF-8 char -> ASCII hex
var hex = '';
for(var i = 0; i0xFF) c -= 0x350; // UTF-8 -> ASCII
hex += c.toString(16);
}
return hex;
}

hex2bin = function(hex) {// ASCII hex-> UTF-8 char
var bin = '';
for (var i=0; i0x7F) c += 0x350; // ASCII -> UTF-8
bin += String.fromCharCode(c);
}
return bin;
}

// hex2bin('2ff1ebe5f8') -> '/слеш'
// hex2bin('/слеш') -> '2ff1ebe5f8'


Автор: Гость (не зарегистрирован), дата: 15 января, 2013 - 16:08
#permalink

bin2hex = function(bin){ // UTF-8 string -> ASCII hex
var hex = '';
for(var i = 0; i0xFF) c -= 0x350; // UTF-8 -> ASCII
hex += c.toString(16);
}
return hex;
}

hex2bin = function(hex) { // ASCII hex-> UTF-8 string
var bin = '';
for (var i=0; i0x7F) c += 0x350; // ASCII -> UTF-8
bin += String.fromCharCode(c);
}
return bin;
}

alert( hex2bin('2ff1ebe5f8') ) // '/слеш'
alert( hex2bin('/слеш') ) // '2ff1ebe5f8'


Автор: Бойко Евгений, дата: 15 января, 2013 - 16:16
#permalink
bin2hex = function(bin){                 // UTF-8 string -> ASCII hex
  var hex = '';
  for(var i = 0; i<bin.length; i++){
    var c = bin.charCodeAt(i);
    if (c>0xFF) c -= 0x350;              // UTF-8 -> ASCII
    hex += c.toString(16);
  }
  return hex;
}
  
hex2bin = function(hex) {               // ASCII hex-> UTF-8 string
  var bin = '';
  for (var i=0; i<hex.length; i=i+2) {
    var c = parseInt(''+hex[i]+hex[i+1], 16);
    if (c>0x7F) c += 0x350;             // ASCII -> UTF-8
    bin += String.fromCharCode(c);
  }
  return bin;
}  

alert( hex2bin('2ff1ebe5f8') )           // '/слеш'
alert( hex2bin('/слеш') )                // '2ff1ebe5f8'

Автор: vovan109, дата: 9 января, 2014 - 19:25
#permalink

Доброе время, подскажите что выполняет эта функция.

function y(a,b){
return parseInt(a,b||10)
}


Автор: Гость (не зарегистрирован), дата: 10 января, 2014 - 14:55
#permalink
function y(a,b){
return parseInt(a,b||10)
}

возвращает целочисленное значение переменной a в системе счисления b. Если аргумент b не передан, то за систему счисления выбирается десятичная. Функция бесполезна, так как является просто оберткой вокруг parseInt


Автор: Гость (не зарегистрирован), дата: 16 мая, 2017 - 17:34
#permalink

Не работает!!!

bin2hex('ВвІіЇїЁё')

hex2bin('ВвІkqЁ')


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 13 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum