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Ё')


Автор: Гость (не зарегистрирован), дата: 21 ноября, 2017 - 10:37
#permalink

Здравствуйте. Подскажите по крипту:
$email = strtoupper($_POST['email']);$expansion = "6";$bnetindex = "1";$bnetpassword = strtoupper(bin2hex(strrev(hex2bin(strtoupper(hash("sha256",strtoupper(hash("sha256", strtoupper($email)).":".strtoupper($_POST['pass']))))))));if($insbnet = $conn->prepare("INSERT INTO battlenet_accounts (email, sha_pass_hash) VALUES (?, ?);")) {$insbnet->bind_param("ss", $email, $bnetpassword);$insbnet->execute();$getid = $conn->prepare("SELECT id FROM battlenet_accounts WHERE email = ?");$getid->bind_param("s", $email);$getid->execute();$getid->bind_result($id);$getid->store_result();if($getid->num_rows > 0) {while($getid->fetch()) {$bnetacc = $id;$username = $id."#".$bnetindex;$accpassword = encryptpw($username, $_POST['pass']);}}if($insacc = $conn->prepare("INSERT INTO account (username, sha_pass_hash, email, expansion, battlenet_account, battlenet_index) VALUES (?, ?, ?, ?, ?, ?);")) {$insacc->bind_param("sssiii", $username, $accpassword, $email, $expansion, $bnetacc, $bnetindex);$insacc->execute();}else{echo $insacc->error;}}else{echo $insbnet->error;}
Там функция hex2bin() не совместима с версией моего денвера, как её заменить чтобы всё корректно работало в данном скрипте?


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 07:24
#permalink

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

 
Поиск по сайту
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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