[Tutor] Need help printing a pickled data
Matt D
md123 at nycap.rr.com
Wed Jun 26 18:34:18 CEST 2013
On 06/25/2013 10:33 PM, eryksun wrote:
> On Tue, Jun 25, 2013 at 8:35 PM, Matt D <md123 at nycap.rr.com> wrote:
>> so that code above is the wrapper of what the code below makes, which is
>> pickled data?:
>>
>> string
>> pickle::to_string() const
>> {
>> size_t n = 1;
>> ostringstream os;
>> os << "(dp" << n++ << endl;
>> for(stringmap::const_iterator i(map_.begin()); i != map_.end(); ++i) {
>> os << "S'" << i->first << "'" << endl;
>> os << "p" << n++ << endl;
>> os << "S'" << i->second << "'" << endl;
>> os << "p" << n++ << endl << "s";
>> }
>> os << "." << endl;
>> return os.str();
>> }
>
> That's a protocol 0 dict. Between MARK "(" and STOP "." is a DICT "d".
> Each key/value is a STRING "S". After pushing a key/value pair on the
> stack they're added to the dict by SETITEM "s". The PUT "p" operations
> store the stack top into the 'memo' (scratch array), but they seem
> superfluous since there's no matching GET (g).
>
> For example:
>
> >>> pkl = "(dS'key1'\nS'val1'\nsS'key2'\nS'val2'\ns."
>
> >>> pickle.loads(pkl)
> {'key2': 'val2', 'key1': 'val1'}
>
> >>> pickletools.dis(pkl)
> 0: ( MARK
> 1: d DICT (MARK at 0)
> 2: S STRING 'key1'
> 10: S STRING 'val1'
> 18: s SETITEM
> 19: S STRING 'key2'
> 27: S STRING 'val2'
> 35: s SETITEM
> 36: . STOP
> highest protocol among opcodes = 0
>
>
> FYI, this appears to be the repository for the above C++
> (pickle::to_string, hdu::snapshot):
>
> http://op25.osmocom.org/trac/wiki.png/browser/trunk/blocks/src/lib
>
> But I've only glanced at the code and don't know GNU Radio from GNU Gnews.
>
Thanks!
Yes I am working with a decoder used in GNU radio. Python is used for
the UI while the computationally intense stuff is done in C++ blocks.
Trying to learn this hybrid C++/Python system really is a crash course.
More information about the Tutor
mailing list