Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Циклический сдвиг (https://javascript.ru/forum/misc/46035-ciklicheskijj-sdvig.html)

Дзен-трансгуманист 26.03.2014 23:30

Цитата:

Сообщение от dmitriy37
т.е здесь за раз кодируется два символа??

Если под "здесь за раз" подразумевается "в одной итерации цикла", то это должно быть очевидно. А как иначе, если блоками по 4 байта?

dmitriy37 26.03.2014 23:39

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 304597)
Если под "здесь за раз" подразумевается "в одной итерации цикла", то это должно быть очевидно. А как иначе, если блоками по 4 байта?

благодарю за труд))

Дзен-трансгуманист 26.03.2014 23:55

Просто оставлю это здесь:

function circularShift ( value, shift ) {
  shift &= 31;
  return value << shift | value >>> ( 32 - shift );
}

Положительный shift - влево, отрицательный - вправо.

dmitriy37 28.03.2014 01:04

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 304567)
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,
Всё довольно просто, не так ли? ))


а почему здесь за раз кодируется два символа?? если мы берем за каждую итерацию цикла по одному элементу


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