From: Matt Brooks Date: 2009-09-03T04:33:26+09:00 Subject: Re: confusing string parsing problem 7stud -- wrote: > Matt Brooks wrote: >> Also, I never made it clear but the string is in network byte order (big >> Endian) > > data = "" > > data << 0.chr << 3.chr #2 bytes > data << 0.chr << 0.chr #2 bytes > data << 1.chr #1 byte > data << "BFO" << 0.chr #null terminated string > data << "-8000" << "\000" #null terminated string > data << 0.chr << 0.chr #2 bytes > > p data > > --output:-- > "\000\003\000\000\001BFO\000-8000\000\000\000" > > results = data.unpack("n2CZ*Z*n") > p results > > --output:-- > [3, 0, 1, "BFO", "-8000", 0] 7stud, Wow that is an elegant way! thank you for your time. I do appreciate both responses very much. The first one clued me into using unpack...correctly I was just now excited to get my very verbose way to work, I will probably switch to how you are doing it. Just for comment, here is what i just got working... #prints first 5 bytes formatted nicely writelog("Sub Element Message: #{bin_msg.inspect_detailed})") #How many pairs to iterate through writelog("Pairs to get: #{bin_msg.pairs}") times_iterated = 0 while times_iterated < bin_msg.pairs #Get Value Name, variable length current_unpacked_char = bin_msg.optional_sub_elements.unpack("Z*") #Print it writelog("\n\nParam Value Name = #{current_unpacked_char}\n") #Remove Name from front of string bin_msg.optional_sub_elements = bin_msg.optional_sub_elements.sub(/^#{current_unpacked_char}\000/, '') #Get Value, variable length current_unpacked_char = bin_msg.optional_sub_elements.unpack("Z*") #Print it writelog("\n\nParam Value = #{current_unpacked_char}\n") #Remove Value from front of string bin_msg.optional_sub_elements = bin_msg.optional_sub_elements.sub(/^#{current_unpacked_char}\000/, '') #Get Last two byte value current_unpacked_char = bin_msg.optional_sub_elements.unpack("n") #Print it writelog("\n\nAudio Inversion Frequency = #{current_unpacked_char}\n") current_packed_char = current_unpacked_char.pack("n") #Remove Last two byte value bin_msg.optional_sub_elements = bin_msg.optional_sub_elements.sub(/^#{current_packed_char}/, '') times_iterated += 1 end -- Posted via http://www.ruby-forum.com/.