Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2014, 19:16
Интересующийся
Отправить личное сообщение для dmitriy37 Посмотреть профиль Найти все сообщения от dmitriy37
 
Регистрация: 25.03.2014
Сообщений: 14

Циклический сдвиг
Ребятки помогите!!! у меня есть сообщение " мама мыла раму " мне его надо закодировать, надо каждые 4байта сдвинуть циклически влево на 2 бита, как это делается ума не приложу, а на чем то другом писать не умею
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2014, 22:02
Аватар для rekzi
Аспирант
Отправить личное сообщение для rekzi Посмотреть профиль Найти все сообщения от rekzi
 
Регистрация: 28.08.2013
Сообщений: 78

Получаете код каждого символа, он будет в шестнадцатеричном формате; переводите его в числовое преставление, применяете сдвиг, затем опять в шестнадцатеричное представление с формированием строки.
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2014, 22:25
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

dmitriy37, что значит "каждые 4байта сдвинуть циклически влево на 2 бита"?
Сообщение от rekzi
Получаете код каждого символа, он будет в шестнадцатеричном формате
Как получить код в шестнадцатеричном формате?
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2014, 23:44
Аватар для rekzi
Аспирант
Отправить личное сообщение для rekzi Посмотреть профиль Найти все сообщения от rekzi
 
Регистрация: 28.08.2013
Сообщений: 78

charCodeAt(i) - возвращает десятичный код символа. Я думал будет шестнадцатеричное значение, по примеру с вставкой символов в строку.
С числовым значением можно работать как угодно.

Последний раз редактировалось rekzi, 25.03.2014 в 23:46.
Ответить с цитированием
  #5 (permalink)  
Старый 26.03.2014, 18:56
Интересующийся
Отправить личное сообщение для dmitriy37 Посмотреть профиль Найти все сообщения от dmitriy37
 
Регистрация: 25.03.2014
Сообщений: 14

если применить оператор сдвига << надо что бы биты циклично сдвинулись, а не что бы их места нули занимали, если можно небольшой пример
Ответить с цитированием
  #6 (permalink)  
Старый 26.03.2014, 18:57
Интересующийся
Отправить личное сообщение для dmitriy37 Посмотреть профиль Найти все сообщения от dmitriy37
 
Регистрация: 25.03.2014
Сообщений: 14

Сообщение от rekzi Посмотреть сообщение
charCodeAt(i) - возвращает десятичный код символа. Я думал будет шестнадцатеричное значение, по примеру с вставкой символов в строку.
С числовым значением можно работать как угодно.
если применить оператор сдвига << надо что бы биты циклично сдвинулись, а не что бы их места нули занимали, если можно небольшой пример
Ответить с цитированием
  #7 (permalink)  
Старый 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.
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2014, 21:26
Интересующийся
Отправить личное сообщение для dmitriy37 Посмотреть профиль Найти все сообщения от dmitriy37
 
Регистрация: 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 байта? а на сколько бит они сдвигаются??
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2014, 22:28
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от dmitriy37
т.е здесь сдвигаются каждые 4 байта? а на сколько бит они сдвигаются??
Про битовые операторы можно почитать здесь, а потом понять ответ на свой вопрос самостоятельно.
Попутно, если не в курсе, в JS используется юникод, и на каждый символ отводится 16 бит (в т.ч. части суррогатных пар).
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2014, 22:49
Интересующийся
Отправить личное сообщение для dmitriy37 Посмотреть профиль Найти все сообщения от dmitriy37
 
Регистрация: 25.03.2014
Сообщений: 14

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Про битовые операторы можно почитать здесь, а потом понять ответ на свой вопрос самостоятельно.
Попутно, если не в курсе, в JS используется юникод, и на каждый символ отводится 16 бит (в т.ч. части суррогатных пар).
т.е здесь за раз кодируется два символа??
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сдвиг блока вправо за границу экрана dalis jQuery 2 01.07.2013 23:39
Сдвиг при наведение мышки BelkinV Общие вопросы Javascript 8 28.11.2012 12:20
IE7 - scrollLeft, лишний сдвиг Pumych (X)HTML/CSS 7 06.07.2011 14:07
javascript - сдвиг текста в лево и право nmmnmmn Opera, Safari и др. 1 23.04.2010 00:50
Сдвиг при изменении border mycoding (X)HTML/CSS 11 22.04.2010 09:38