2016-06-16 7 views
-5

to_chr関数は、暗号化された配列を返しますが、文字に変換されるはずです。私は多くのことを試して、うまくいかなかったものをコメントしました。数値の配列を文字に変換するruby

class Encrypt 
    def initialize(code, string) 
    @code = code 
    @string = string 
    @encrypted = [] 
    end 

    def to_byte 
    @string.each_byte do |c| 
     @encrypted.push(c + @code) 
    end 
    print @encrypted 
    end 

    def to_chr 
    n = @encrypted.length 
    # n.times do |i| 
    # @encrypted.push(i.chr) 
    # end 
    print @encrypted[0].chr 

    # @encrypted.each do |x| 
    # @encrypted.push(x.chr) 
    # end 
    # print @encrypted 
    end 
end 

goop = Encrypt.new(2, "hello") 
goop.to_chr 
#=> in `to_chr': undefined method `chr' for nil:NilClass (NoMethodError) 
+0

@Stefan [この](https://github.com/Evan-Peterson/Encryption)がリンクされ役に立てば幸いGitHubリポジトリにto_chr関数は暗号化された配列を返すが、文字に変換されているはずである。 –

+1

GitHubのコードを '@ciphered'で空にすると、実際に何も割り当てられていないので、それから始めることになります(配列を生成するために' goop.to_byte'を実行します)。 'print'の代わりに' puts' –

答えて

0

あなたはEncryptedメソッドのインスタンスを作成していますが、@code = 2を設定し、@string = "Hello"および@encrypted = []。だから@encrypted[0]に電話すると、ルビーはnilを返します。

ですから、このようなあなたのクラスを変更することができます。

class Encrypt 
    def initialize(code, string) 
    @code, @string, @encrypted = code, string, [] 
    end 

    def to_byte 
    @string.each_byte { |c| @encrypted << c + @code } 
    end 

    def to_chr 
    to_byte if @encrypted.empty? 

    @encrypted.map(&:chr) 
    end 
end 

goop = Encrypt.new(2, "hello") 
p goop.to_chr 
# => ["j", "g", "n", "n", "q"] 

私はこれが

0
def to_chr 
    @encrypted.each do |i| 
     print i.chr 
    end 
    print "\n" 
end 

戻っ前to_chr

goop = Encrypt.new(2, "hello") 
goop.to_byte 
goop.to_chr 

to_byteを呼び出すようにしてください:

jgnnq

+0

'puts @ encrypted.map(&:chr)'は少し少ないphpishです。 – mudasobwa

+0

@mudasobwaは、各文字を別々の行に出力します。 'puts @ encrypted.pack( 'c *')' – Stefan

+0

普通、値を他の場所に保存し、それらを印刷しないのが普通です。私は 'puts'が' print'よりも優れた選択肢であることに同意しますが、私はこれを本当に心配することなく、これを下げて汚れた解決策にしました。 –

関連する問題