
25.03.2014, 19:16
|
Интересующийся
|
|
Регистрация: 25.03.2014
Сообщений: 14
|
|
Циклический сдвиг
Ребятки помогите!!! у меня есть сообщение " мама мыла раму " мне его надо закодировать, надо каждые 4байта сдвинуть циклически влево на 2 бита, как это делается ума не приложу, а на чем то другом писать не умею
|
|

25.03.2014, 22:02
|
 |
Аспирант
|
|
Регистрация: 28.08.2013
Сообщений: 78
|
|
Получаете код каждого символа, он будет в шестнадцатеричном формате; переводите его в числовое преставление, применяете сдвиг, затем опять в шестнадцатеричное представление с формированием строки.
|
|

25.03.2014, 22:25
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
dmitriy37, что значит "каждые 4байта сдвинуть циклически влево на 2 бита"?
Сообщение от rekzi
|
Получаете код каждого символа, он будет в шестнадцатеричном формате
|
Как получить код в шестнадцатеричном формате? 
|
|

25.03.2014, 23:44
|
 |
Аспирант
|
|
Регистрация: 28.08.2013
Сообщений: 78
|
|
charCodeAt(i) - возвращает десятичный код символа. Я думал будет шестнадцатеричное значение, по примеру с вставкой символов в строку.
С числовым значением можно работать как угодно.
Последний раз редактировалось rekzi, 25.03.2014 в 23:46.
|
|

26.03.2014, 18:56
|
Интересующийся
|
|
Регистрация: 25.03.2014
Сообщений: 14
|
|
если применить оператор сдвига << надо что бы биты циклично сдвинулись, а не что бы их места нули занимали, если можно небольшой пример
|
|

26.03.2014, 18:57
|
Интересующийся
|
|
Регистрация: 25.03.2014
Сообщений: 14
|
|
Сообщение от rekzi
|
charCodeAt(i) - возвращает десятичный код символа. Я думал будет шестнадцатеричное значение, по примеру с вставкой символов в строку.
С числовым значением можно работать как угодно.
|
если применить оператор сдвига << надо что бы биты циклично сдвинулись, а не что бы их места нули занимали, если можно небольшой пример
|
|

26.03.2014, 20:25
|
 |
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
function encode ( source ) {
for ( var result = '', int32, i = 0; i < source.length; ) {
int32 = source.charCodeAt(i++) << 16 | source.charCodeAt(i++);
int32 = int32 << 2 | int32 >>> 30;
result += String.fromCharCode( int32 >>> 16, int32 & 65535 );
}
return result;
}
function decode ( result ) {
for ( var source = '', int32, i = 0; i < result.length; ) {
int32 = result.charCodeAt(i++) << 16 | result.charCodeAt(i++);
int32 = int32 >>> 2 | int32 << 30;
source += String.fromCharCode( int32 >>> 16, int32 & 65535 );
}
return source.charCodeAt(i-1) == 0 ? source.slice(0, -1) : source;
}
console.log( encode( 'мама мыла раму' ));
console.log( decode( encode( 'мама мыла раму' )));
dmitriy37,
Всё довольно просто, не так ли? ))
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 26.03.2014 в 22:45.
|
|

26.03.2014, 21:26
|
Интересующийся
|
|
Регистрация: 25.03.2014
Сообщений: 14
|
|
Сообщение от Дзен-трансгуманист
|
function encode ( source ) {
for ( var result = '', int32, i = 0; i < source.length; ) {
int32 = source.charCodeAt(i++) << 16 | source.charCodeAt(i++);
int32 = int32 << 2 | int32 >>> 30;
result += String.fromCharCode( int32 >>> 16, int32 & 65535 );
}
return result;
}
function decode ( result ) {
for ( var source = '', int32, i = 0; i < result.length; ) {
int32 = result.charCodeAt(i++) << 16 | result.charCodeAt(i++);
int32 = int32 >>> 2 | int32 << 30;
source += String.fromCharCode( int32 >>> 16, int32 & 65535 );
}
return source.charCodeAt(i-1) == 0 ? source.slice(0, -1) : source;
}
console.log( encode( 'мама мыла раму' ));
console.log( decode( encode( 'мама мыла раму' )));
dmitriy37,
))
|
т.е здесь сдвигаются каждые 4 байта? а на сколько бит они сдвигаются??
|
|

26.03.2014, 22:28
|
 |
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от dmitriy37
|
т.е здесь сдвигаются каждые 4 байта? а на сколько бит они сдвигаются??
|
Про битовые операторы можно почитать здесь, а потом понять ответ на свой вопрос самостоятельно. 
Попутно, если не в курсе, в JS используется юникод, и на каждый символ отводится 16 бит (в т.ч. части суррогатных пар).
__________________
Гейзенберг, возможно, читал этот тред.
|
|

26.03.2014, 22:49
|
Интересующийся
|
|
Регистрация: 25.03.2014
Сообщений: 14
|
|
Сообщение от Дзен-трансгуманист
|
Про битовые операторы можно почитать здесь, а потом понять ответ на свой вопрос самостоятельно. 
Попутно, если не в курсе, в JS используется юникод, и на каждый символ отводится 16 бит (в т.ч. части суррогатных пар).
|
т.е здесь за раз кодируется два символа??
|
|
|
|