From: Martin Duerst Date: 2008-01-20T17:49:19+09:00 Subject: [ruby-dev:33214] Re: Ruby1.9String  バイト列へのインデックス アクセス At 03:48 08/01/20, rubikitch@ruby-lang.org wrote: >From: Yukihiro Matsumoto >あるいはBytesクラスを用意してString#byteで作成できるといいかもしれません。 Bytes クラスはそもそもほとんどもう既にある。Encoding が ASCII-8BIT とか BINARY とかの文字列です。そこからの問題は主に二つあるかと思います。 一つ目は正数の代入。一般的な Encoding 全てをやるとちょっとややこしく なる可能性があるが、BINARY だけでやるのは簡単のはず。なぜかと、現在 整数を代入しようとするとエラーで、その場合を実装すればよいだろう。 もう一つは普通の文字列の場合の BINARY としての一時的な扱い。 例えば (上記の問題が解決したら) s.byte[3] = 101 は temp = s.encoding s.force_encoding('ASCII-8BIT') s[3] = 101 s.force_encoding(temp) と書けます。でも長くて面倒くさいですよね。ここ何とかできれば この辺りは結構前進できると思いますが、こちらで知っている限りでは 現在の内部構造ではそんなに簡単ではなさそうです。 ちなみに、byte のではなく bytes の方が妥当だと思います。 >s = "abcde" >s.byte # "abcde"のバイト列オブジェクト >s.byte[3] # => 100 これは多分 s.byte[3].ord で我慢できるのではないかと自分では思いますが、 いかがでしょうか。 宜しくお願いします。 Martin. >s.byte[3] = 101 # 破壊的更新 >s # => "abcee" > >インデックスにはRangeも指定できるといいです。 > >-- >rubikitch >Blog: http://d.hatena.ne.jp/rubikitch/ >Site: http://www.rubyist.net/~rubikitch/ #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp