Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   кто может обьяснить, как работает этот код (https://javascript.ru/forum/misc/14039-kto-mozhet-obyasnit-kak-rabotaet-ehtot-kod.html)

KOLANICH 25.12.2010 21:55

кто может обьяснить, как работает этот код
 
function data_string(data) // Generates the binary data string from character / multibyte data
{
	var str='';
	for(var i=0,len=data.length;i<len;i++){
           var a=String.fromCharCode(data[i].charCodeAt(0)&0xff);
            console.log(a+"\n"+str+"\n"+data[i]+"\n"+data.charCodeAt(i)+"\n"+data[i].charCodeAt(0));
// var a=String.fromCharCode(data.charCodeAt(i)&0xff);//это чем хуже?
// var a=String.fromCharCode(data[i]&0xff);//или это
// var a=String.fromCharCode(data.charCodeAt(i));//или вообще  это
            str+=a;
        }
	return str;
};


и что происходит в случае многобайтовых символов
и нет ли встроенного аналога в firefox

Gvozd 25.12.2010 23:01

function data_string1(data) // Generates the binary data string from character / multibyte data
{
	var str='';
	for(var i=0,len=data.length;i<len;i++){
           var a=String.fromCharCode(data[i].charCodeAt(0)&0xff);
            console.log(a+"\n"+str+"\n"+data[i]+"\n"+data.charCodeAt(i)+"\n"+data[i].charCodeAt(0));
            str+=a;
        }
	return str;
};
function data_string2(data) // Generates the binary data string from character / multibyte data
{
	var str='';
	for(var i=0,len=data.length;i<len;i++){
			var a=String.fromCharCode(data.charCodeAt(i)&0xff);//это чем хуже?
            console.log(a+"\n"+str+"\n"+data[i]+"\n"+data.charCodeAt(i)+"\n"+data[i].charCodeAt(0));

            str+=a;
        }
	return str;
};
function data_string3(data) // Generates the binary data string from character / multibyte data
{
	var str='';
	for(var i=0,len=data.length;i<len;i++){
			var a=String.fromCharCode(data[i]&0xff);//или это
            console.log(a+"\n"+str+"\n"+data[i]+"\n"+data.charCodeAt(i)+"\n"+data[i].charCodeAt(0));
            str+=a;
        }
	return str;
};
function data_string4(data) // Generates the binary data string from character / multibyte data
{
	var str='';
	for(var i=0,len=data.length;i<len;i++){
			var a=String.fromCharCode(data.charCodeAt(i));//или вообще  это
            console.log(a+"\n"+str+"\n"+data[i]+"\n"+data.charCodeAt(i)+"\n"+data[i].charCodeAt(0));
            str+=a;
        }
	return str;
};
alert(data_string1('йцу'));
alert(data_string2('йцу'));
alert(data_string3('йцу'));
alert(data_string4('йцу'));

Gvozd 25.12.2010 23:03

Цитата:

Сообщение от KOLANICH
это чем хуже?

по поводу твоеих вариантов? ядал овет/
только один из них дает тот же результат

KOLANICH 26.12.2010 00:08

и ещё вопрос
почему не работает
function toSinglebyte(data)
{
	var data_string='';
	for(var i=0,il=data.length;i<il;i++){
		var cCode=data.charCodeAt(i);
       
		data_string+=String.fromCharCode(cCode>>>8);
                         data_string+=String.fromCharCode(cCode&0xff);
		
	}
	return data_string;
};


//window.location.href="data:text/plain;base64,"+btoa(toSinglebyte("qwerty"));
window.location.href="data:text/plain;charset=UTF-8;base64,"+btoa(toSinglebyte("qwertyйцукен"));

B@rmaley.e><e 26.12.2010 10:43

KOLANICH, Вы будете удивлены, но символ q уже занимает один байт.
А еще бывают символы, занимающие 3 и даже 4 байта.

B@rmaley.e><e 26.12.2010 15:27

Цитата:

Сообщение от KOLANICH
a любой символ в utf-8 занимает 2 байта

Лолщито? RTFM!

KOLANICH 26.12.2010 17:11

function splitBytes(data)
{
	var data_string='';
	for(var i=0,il=data.length;i<il;i++){
		var cCode=data.charCodeAt(i);
		var bytes=[],highestByte=0;
		for(var j=0;j<4;j++){
			bytes[j]=cCode>>>(8*j);
				if(bytes[j])highestByte=j;
		}
		console.log(bytes,highestByte);

		if(highestByte==0){data_string+=String.fromCharCode(bytes[0]);continue;}
		data_string+=String.fromCharCode(bytes[highestByte]|(12*16));
		for(var j=highestByte-1;j>=0;j--){
			data_string+=String.fromCharCode(bytes[j]|(8*16));
		}
		
	}
	return data_string;
};

var xhr=new XMLHttpRequest();
xhr.open("GET","http://www.google.com/recaptcha/api/image?c=03AHJ_VuuTZPpE0MzmQ0H3MXLoflLPf6Ofe-gOvgoorBrOKN9f6iHglvIkBp8Hm6gPT6au_9pPLqAfoKFKcxNF-14dUbxfKmN34nuVpLvddLiSEY52pYuRcIuSj3vCwJ4P2rDPQI49Ej9O65sPTXh0CskwWbohadL9GA",false);
//xhr.overrideMimeType('text/plain; charset=x-user-defined');  

xhr.send();


var imgbase64=btoa(splitBytes(xhr.responseText));
window.location.href="data:image/jpeg;base64,"+imgbase64;

console.log(img);

тоже хреново пашет


Часовой пояс GMT +3, время: 15:35.