Module: RCNB

Defined in:
lib/rcnb.rb,
lib/rcnb/cli.rb,
lib/rcnb/str.rb,
lib/rcnb/version.rb

Overview

RCNB模块

Example

require 'rcnb'

RCNB.encode('Who NB?')
# => ȐȼŃƅȓčƞÞƦȻƝƃŖć
RCNB.decode('ȐĉņþƦȻƝƃŔć')
# => RCNB!

Defined Under Namespace

Modules: CLI, Str

Class Method Summary collapse

Class Method Details

.decode(str, encoding = nil) ⇒ String

将RCNB密文解码为文本

Parameters:

  • str (String)

    密文

  • encoding (defaults to: nil)

    文本编码

Returns:

  • (String)

    文本

Raises:

  • (ArgumentError)


146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/rcnb.rb', line 146

def self.decode(str,encoding=nil)
  raise ArgumentError,'invalid length' unless (str.size & 1).zero?
  arr=[]
  0.upto( (str.size>>2)-1 ) do |i|
    i4=i*4
    short=decodeShort(str[i4,4])
    arr<< (short>>8)
    arr<< (short&0xFF)
  end
  arr<< decodeByte(str[-2,2]) unless (str.size & 2).zero?
  result=arr.pack('C*')
  if encoding
    result=result.force_encoding(encoding)
    result=result.encode(__ENCODING__)
  else
    result=result.force_encoding(__ENCODING__)
  end
  result
end

.encode(str, encoding = nil) ⇒ String

将文本编码为RCNB密文

Parameters:

  • str (String)

    文本

  • encoding (defaults to: nil)

    文本编码

Returns:

  • (String)

    密文



130
131
132
133
134
135
136
137
138
139
140
# File 'lib/rcnb.rb', line 130

def self.encode(str,encoding=nil)
  str=str.encode(encoding) if encoding
  arr=str.unpack('C*')
  result=''
  0.upto( (arr.size>>1)-1 ) do |i|
    i2=i*2
    result+=encodeShort( arr[i2]<<8 | arr[i2+1] )
  end
  result+=encodeByte(arr[arr.size-1]) unless (arr.size & 1).zero?
  result
end