|
View:
New views
16 Messages
—
Rating Filter:
Alert me
|
|
|
[ruby-list:46146] 文字変換前川です。 小波さんのアドバイスを受け、どうにか、変換処理を つくりましたが、どうしても、forループを使ってしまいます。 どなたか、each文にするスマートなコーディングに 手直しして、いただけませんか。 よろしくお願いします。 コーディングは、以下です。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− data1 = '91448a43835683588365838047' #船海システムG 26バイト data2 = '54455354' #TEST 8バイト mojiretu = "" #文字列のバッファ pointData = 0 #文字列のポインタ baseData = "" #"a2" のバッファ for pointData in 0..data1.length/2 do #2バイトずつに分割するための"a2"を設 定する baseData = baseData + "a2" end strparts = data1.unpack(baseData) #文字列を2バイトずつに分割する。 puts strparts #デバッグライト for pointData in 0..data1.length/2 do mojiretu = mojiretu + strparts[pointData].hex.chr #2バイトデータ→文字列 に変換 end puts mojiretu #デバッグライト 変換結果(船海システムG)が、表示される |
|
|
[ruby-list:46147] Re: 文字変換永井@知能.九工大です.
From: eiichi_maekawa@... Subject: [ruby-list:46146] 文字変換 Date: Fri, 3 Jul 2009 16:08:40 +0900 Message-ID: <OF5F527F54.FF76E71A-ON492575E8.00265FA8-492575E8.00273D60@...> > 小波さんのアドバイスを受け、どうにか、変換処理を > つくりましたが、どうしても、forループを使ってしまいます。 > > どなたか、each文にするスマートなコーディングに > 手直しして、いただけませんか。 やろうとしていることをそのままに直すなら,例えば --------------------------------------------------------------- def convert(str) str.unpack('a2'*(str.length/2)).map{|c| c.hex.chr}.join('') end data1 = '91448a43835683588365838047' #船海システムG 26バイト puts convert(data1) --------------------------------------------------------------- とか? -- 永井 秀利 (nagai@...) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46148] Re: 文字変換前川です。
永井さん ありがとうございました。 私では、とても、実現できないコーディングです。 地道に、努力していきます。 Hidetoshi NAGAI <nagai@...> wrote on 2009/07/03 16:41:35: > 永井@知能.九工大です. > From: eiichi_maekawa@... > Subject: [ruby-list:46146] 文字変換 > Date: Fri, 3 Jul 2009 16:08:40 +0900 > Message-ID: <OF5F527F54.FF76E71A-ON492575E8.00265FA8-492575E8. > 00273D60@...> > > 小波さんのアドバイスを受け、どうにか、変換処理を > > つくりましたが、どうしても、forループを使ってしまいます。 > > > > どなたか、each文にするスマートなコーディングに > > 手直しして、いただけませんか。 > やろうとしていることをそのままに直すなら,例えば > --------------------------------------------------------------- > def convert(str) > str.unpack('a2'*(str.length/2)).map{|c| c.hex.chr}.join('') > end > data1 = '91448a43835683588365838047' #船海システムG 26バイト > puts convert(data1) > --------------------------------------------------------------- > とか? > -- > 永井 秀利 (nagai@...) > 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46149] Re: 文字変換永井@知能.九工大です.
From: eiichi_maekawa@... Subject: [ruby-list:46148] Re: 文字変換 Date: Fri, 3 Jul 2009 17:03:42 +0900 Message-ID: <OF5C46AA17.AE4F2D1D-ON492575E8.002BFD1E-492575E8.002C46AC@...> > 永井さん ありがとうございました。 ついでにですが,こんなのでいいのかもしれません. ---------------------------------------------------------------------- def convert(str) str.gsub(/../){|c| c.hex.chr} end ---------------------------------------------------------------------- -- 永井 秀利 (nagai@...) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46150] Re: 文字変換前川です。 ありがとうございました。 とても、とても、思いつきません。 努力するしかないですね。 Hidetoshi NAGAI <nagai@...> wrote on 2009/07/03 17:14:16: > 永井@知能.九工大です. > From: eiichi_maekawa@... > Subject: [ruby-list:46148] Re: 文字変換 > Date: Fri, 3 Jul 2009 17:03:42 +0900 > Message-ID: <OF5C46AA17.AE4F2D1D-ON492575E8.002BFD1E-492575E8. > 002C46AC@...> > > 永井さん ありがとうございました。 > ついでにですが,こんなのでいいのかもしれません. > ---------------------------------------------------------------------- > def convert(str) > str.gsub(/../){|c| c.hex.chr} > end > ---------------------------------------------------------------------- > -- > 永井 秀利 (nagai@...) > 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46151] 文字から16進への変換方法について前川です。 文字から、16進への変換方法がわかりません。 変換したいのは、 SJISを想定し、 船 → 0x91,0x44 に変換したいのです。 よろしくお願いします。 |
|
|
[ruby-list:46152] Re: 文字から16進への変換方法についてFrom: eiichi_maekawa@...
Subject: [ruby-list:46151] 文字から16進への変換方法について Date: Fri, 3 Jul 2009 18:06:41 +0900 るびきちです。 > 文字から、16進への変換方法がわかりません。 > > 変換したいのは、 > SJISを想定し、 > 船 → 0x91,0x44 に変換したいのです。 Ruby 1.8、Ruby 1.9共通。 # -*- coding: cp932 -*- "船".each_byte do |byte| "%#x" % byte # => "0x91", "0x44" end String#each_byteでそれぞれのバイトでループします。 そして、byte(整数)を String#% を使って書式文字列 %#x で 0x〜 に変換します。 -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/ Twit: http://twitter.com/rubikitch/ |
|
|
[ruby-list:46168] Re: 文字から16進への変換方法について前川です。
るびきちさんの助言で、なんとか、変換処理作りましたが、 もう少し、Rubyらしいコーディングにしたいのですが、 どなたか、ご教示願います。 よろしくお願いします。 るびきちさんの助言======= > # -*- coding: cp932 -*- > "船".each_byte do |byte| > "%#x" % byte # => "0x91", "0x44" > end > String#each_byteでそれぞれのバイトでループします。 > そして、byte(整数)を String#% を使って書式文字列 %#x で 0x〜 に変換しま す。 ===================== 下名が作成したプログラム(SJIS)−−−−−−−−−−− data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換する data2 = 'TEST' # 8バイトの '54455354'に変換する data3 ='船' def textToHexConversion(data) textHex='' byteConversionData = ['a','b','c','d','e','f'] data.each_byte do |byte| "%#x" % byte textHex = textHex + (byte/16).to_s byte2 = byte % 16 if (byte2 > 9) #10以上は、aからfに置き換える textHex = textHex + byteConversionData[byte2-10] else textHex =textHex+byte2.to_s end end return textHex end puts textToHexConversion(data1) # data1の変換 puts textToHexConversion(data2) # data2の変換 puts textToHexConversion(data3) # data3の変換 −−−−−−−−−−−−−−−−−−− |
|
|
[ruby-list:46169] Re: 文字から16進への変換方法について成瀬です。
eiichi_maekawa@... wrote: > るびきちさんの助言で、なんとか、変換処理作りましたが、 > もう少し、Rubyらしいコーディングにしたいのですが、 > どなたか、ご教示願います。 > よろしくお願いします。 > textHex = textHex + (byte/16).to_s String#to_sのマニュアルを読み返してみましょう。 to_sは引数を取るのです。 > "%#x" % byte のあたりに考慮の跡は見えますが、sprintfのマニュアルも見直して見るとよいかと。 こちらの方法の方が%02xがあるからより楽でしょう。 最もRubyらしい……というかPerlらしい方法は、 '船海システムG'.unpack('H*')[0] でしょうね。 -- NARUSE, Yui <naruse@...> |
|
|
[ruby-list:46170] Re: 文字から16進への変換方法について永井@知能.九工大です.
From: eiichi_maekawa@... Subject: [ruby-list:46168] Re: 文字から16進への変換方法について Date: Mon, 6 Jul 2009 18:30:35 +0900 Message-ID: <OF667B9E0F.0DE8AB87-ON492575EB.00333E0F-492575EB.00343BE4@...> > るびきちさんの助言で、なんとか、変換処理作りましたが、 > もう少し、Rubyらしいコーディングにしたいのですが、 > どなたか、ご教示願います。 せっかく教えていただいた "%#x" の # の意味くらいは 自分で調べた方がいいとは思いますが... str = '船海システムG' であるとするとき, block を与えない each_byte が Enumerable::Enumerator オブジェクトを 返すようになったバージョンの Ruby であれば, -------------------------------------------------------------------- str.each_byte.map{|x| '%x' % x}.join('') -------------------------------------------------------------------- なんてのでもいいでしょうね. block を与えないと each_byte がエラーになるようなバージョンの Ruby なら, -------------------------------------------------------------------- (s = ''; str.each_byte{|x| s << '%x' % x}; s) -------------------------------------------------------------------- とかでしょうか. -- 永井 秀利 (nagai@...) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46171] Re: 文字から16進への変換方法について永井@知能.九工大です.
From: Hidetoshi NAGAI <nagai@...> Subject: [ruby-list:46170] Re: 文字から16進への変換方法について Date: Mon, 6 Jul 2009 19:28:30 +0900 Message-ID: <20090706.192828.41652309.nagai@...> > -------------------------------------------------------------------- > str.each_byte.map{|x| '%x' % x}.join('') > -------------------------------------------------------------------- これでは 16 進 1 桁になる場合にまずかったですね.(^_^; 成瀬さんからのメールにも述べられている通り, '%x' ではなく '%02x' でないとダメでした. ごめんなさい. -- 永井 秀利 (nagai@...) 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46174] Re: 文字から16進への変換方法について成瀬さん、ありがとうございました。
マニュアルも見たりはしているのですが、まだまだ、見方が 足りないようです。 perlらしい記述、参考にさせていただきます。 "NARUSE, Yui" <naruse@...> wrote on 2009/07/06 19:27:18: > 成瀬です。 > eiichi_maekawa@... wrote: > > るびきちさんの助言で、なんとか、変換処理作りましたが、 > > もう少し、Rubyらしいコーディングにしたいのですが、 > > どなたか、ご教示願います。 > > よろしくお願いします。 > > textHex = textHex + (byte/16).to_s > String#to_sのマニュアルを読み返してみましょう。 > to_sは引数を取るのです。 > > "%#x" % byte > のあたりに考慮の跡は見えますが、sprintfのマニュアルも見直して見るとよいか と。 > こちらの方法の方が%02xがあるからより楽でしょう。 > 最もRubyらしい……というかPerlらしい方法は、 > '船海システムG'.unpack('H*')[0] > でしょうね。 > -- > NARUSE, Yui <naruse@...> |
|
|
[ruby-list:46175] Re: 文字から16進への変換方法について永井さん
ありがとうございます。 先のご指摘も、ありがとうございました。 まだまだ、はじめたばかりですので、マニュアルも、ほとんど見ていませんでし た。 なるべく、調べるようにしたいと思います。 Hidetoshi NAGAI <nagai@...> wrote on 2009/07/06 19:32:26: > 永井@知能.九工大です. > From: Hidetoshi NAGAI <nagai@...> > Subject: [ruby-list:46170] Re: 文字から16進への変換方法について > Date: Mon, 6 Jul 2009 19:28:30 +0900 > Message-ID: <20090706.192828.41652309.nagai@...> > > -------------------------------------------------------------------- > > str.each_byte.map{|x| '%x' % x}.join('') > > -------------------------------------------------------------------- > これでは 16 進 1 桁になる場合にまずかったですね.(^_^; > 成瀬さんからのメールにも述べられている通り, > '%x' ではなく '%02x' でないとダメでした. > ごめんなさい. > -- > 永井 秀利 (nagai@...) > 九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門 |
|
|
[ruby-list:46176] メソッドの扱いについて前川です。
文字変換関連、どうにか、メソッドを作りこみましたが、 作ったメソッドを、外部参照で、使用できるようにしたいのですが。 クラスにした場合、 class MyConversion def initialize(data) @data = data end def textToHex @data.unpack('H*')[0] #成瀬さん ありがとうございました。 end def hexToText @data.gsub(/../){|c| c.hex.chr} #永井さん ありがとうございました。 end end 呼ぶ側は、 result = MyConversion.new('船') result1 = result.textToHex あるいは、 result1 = MyConversion.new('船').textToHex ですが、メソッドとして、外部参照するような 使い方(メソッドの延長??) MyConversion.textToHex(データ) に は、できないでしょうか。 たとえば、 convFunc = MyConversion.new #MyConversion を使用するための定義(実態の作成) result = convFunc.textToHex('船') または、'船'.convFunc.textToHex result1 = convFunc.textToHex('長崎') '長崎'.convFunc.textToHex というような具合に。 また、参照する側は、'require パス/ファイル名' で、ファイル内のメソッドを 参照することになると思いますが・・ ご教示、よろしくお願いします。 了 |
|
|
[ruby-list:46179] Re: メソッドの扱いについてFrom: eiichi_maekawa@...
Subject: [ruby-list:46176] メソッドの扱いについて Date: Tue, 7 Jul 2009 13:37:01 +0900 るびきちです。 > 前川です。 > > 文字変換関連、どうにか、メソッドを作りこみましたが、 > 作ったメソッドを、外部参照で、使用できるようにしたいのですが。 > > クラスにした場合、 > > class MyConversion > def initialize(data) > @data = data > end > > def textToHex > @data.unpack('H*')[0] #成瀬さん ありがとうございました。 > end > > def hexToText > @data.gsub(/../){|c| c.hex.chr} #永井さん ありがとうございました。 > end > end > > 呼ぶ側は、 > > result = MyConversion.new('船') > result1 = result.textToHex > > あるいは、 > > result1 = MyConversion.new('船').textToHex > > ですが、メソッドとして、外部参照するような > 使い方(メソッドの延長??) MyConversion.textToHex(データ) に > は、できないでしょうか。 > たとえば、 > > convFunc = MyConversion.new #MyConversion を使用するための定義(実態の作成) > result = convFunc.textToHex('船') または、'船'.convFunc.textToHex > result1 = convFunc.textToHex('長崎') '長崎'.convFunc.textToHex > > というような具合に。 できますよ。 # メソッド名は単語を_で区切るのがRubyのやり方です。 # -*- coding: euc-jp -*- class MyConversion def text_to_hex(data) data.unpack('H*')[0] end def hex_to_text(data) data.gsub(/../){|c| c.hex.chr} end end MyConversion.new.text_to_hex('船') # => "c1a5" # クラスメソッドを定義するのはこうする class MyConversion def self.text_to_hex(data) data.unpack('H*')[0] end def self.hex_to_text(data) data.gsub(/../){|c| c.hex.chr} end end MyConversion.text_to_hex('船') # => "c1a5" -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/ Twit: http://twitter.com/rubikitch/ 『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook |
|
|
[ruby-list:46182] Re: メソッドの扱いについて・ruby-list:46179るびきちさん、ありがとうございました。
rubikitch@... wrote on 2009/07/07 21:31:01: > From: eiichi_maekawa@... > Subject: [ruby-list:46176] メソッドの扱いについて > Date: Tue, 7 Jul 2009 13:37:01 +0900 > るびきちです。 > > 前川です。 > > > > 文字変換関連、どうにか、メソッドを作りこみましたが、 > > 作ったメソッドを、外部参照で、使用できるようにしたいのですが。 > > > > クラスにした場合、 > > > > class MyConversion > > def initialize(data) > > @data = data > > end > > > > def textToHex > > @data.unpack('H*')[0] #成瀬さん ありがとうございました。 > > end > > > > def hexToText > > @data.gsub(/../){|c| c.hex.chr} #永井さん ありがとうございました。 > > end > > end > > > > 呼ぶ側は、 > > > > result = MyConversion.new('船') > > result1 = result.textToHex > > > > あるいは、 > > > > result1 = MyConversion.new('船').textToHex > > > > ですが、メソッドとして、外部参照するような > > 使い方(メソッドの延長??) MyConversion.textToHex(データ) に > > は、できないでしょうか。 > > たとえば、 > > > > convFunc = MyConversion.new #MyConversion を使用するための定義(実態の > > result = convFunc.textToHex('船') または、'船'.convFunc.textToHex > > result1 = convFunc.textToHex('長崎') '長崎'.convFunc.textToHex > > > > というような具合に。 > できますよ。 > # メソッド名は単語を_で区切るのがRubyのやり方です。 > # -*- coding: euc-jp -*- > class MyConversion > def text_to_hex(data) > data.unpack('H*')[0] > end > def hex_to_text(data) > data.gsub(/../){|c| c.hex.chr} > end > end > MyConversion.new.text_to_hex('船') # => "c1a5" > # クラスメソッドを定義するのはこうする > class MyConversion > def self.text_to_hex(data) > data.unpack('H*')[0] > end > def self.hex_to_text(data) > data.gsub(/../){|c| c.hex.chr} > end > end > MyConversion.text_to_hex('船') # => "c1a5" > -- > rubikitch > Blog: http://d.hatena.ne.jp/rubikitch/ > Site: http://www.rubyist.net/~rubikitch/ > Twit: http://twitter.com/rubikitch/ > 『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook |
| Free embeddable forum powered by Nabble | Forum Help |