Class: BinData::String

Inherits:
BasePrimitive show all
Defined in:
lib/bindata/string.rb

Overview

A String is a sequence of bytes. This is the same as strings in Ruby 1.8. The issue of character encoding is ignored by this class.

require 'bindata'

data = "abcdefghij"

obj = BinData::String.new(read_length: 5)
obj.read(data)
obj #=> "abcde"

obj = BinData::String.new(length: 6)
obj.read(data)
obj #=> "abcdef"
obj.assign("abcdefghij")
obj #=> "abcdef"
obj.assign("abcd")
obj #=> "abcd\000\000"

obj = BinData::String.new(length: 6, trim_padding: true)
obj.assign("abcd")
obj #=> "abcd"
obj.to_binary_s #=> "abcd\000\000"

obj = BinData::String.new(length: 6, pad_byte: 'A')
obj.assign("abcd")
obj #=> "abcdAA"
obj.to_binary_s #=> "abcdAA"

Parameters

String objects accept all the params that BinData::BasePrimitive does, as well as the following:

:read_length

The length in bytes to use when reading a value.

:length

The fixed length of the string. If a shorter string is set, it will be padded to this length.

:pad_byte

The byte to use when padding a string to a set length. Valid values are Integers and Strings of length 1. “0” is the default.

:pad_front

Signifies that the padding occurs at the front of the string rather than the end. Default is false.

:trim_padding

Boolean, default false. If set, #value will return the value with all pad_bytes trimmed from the end of the string. The value will not be trimmed when writing.

Defined Under Namespace

Modules: WarnNoReadLengthPlugin

Instance Attribute Summary

Attributes inherited from Base

#parent

Instance Method Summary collapse

Methods inherited from BasePrimitive

#<=>, bit_aligned, #clear?, #do_num_bytes, #do_read, #do_read_with_hook, #do_write, #eql?, #hash, #initialize_instance, #method_missing, #respond_to_missing?, #value, #value=

Methods included from TraceHook

#turn_off_tracing, #turn_on_tracing

Methods inherited from Base

#==, #=~, #abs_offset, arg_processor, auto_call_delayed_io, bindata_name, #clear, #debug_name, #eval_parameter, #get_parameter, #has_parameter?, #initialize_instance, #initialize_with_warning, #inspect, #lazy_evaluator, #new, #num_bytes, #pretty_print, #read, read, register_subclasses, #rel_offset, #safe_respond_to?, #to_binary_s, #to_hex, #to_s, unregister_self, #write

Methods included from AcceptedParametersPlugin

#accepted_parameters, #default_parameters, #mandatory_parameters, #mutually_exclusive_parameters, #optional_parameters

Methods included from RegisterNamePlugin

included

Methods included from Framework

#bit_aligned?, #clear?, #debug_name_of, #offset_of

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class BinData::BasePrimitive

Instance Method Details

#assign(val) ⇒ Object



67
68
69
# File 'lib/bindata/string.rb', line 67

def assign(val)
  super(binary_string(val))
end

#initialize_shared_instanceObject



59
60
61
62
63
64
65
# File 'lib/bindata/string.rb', line 59

def initialize_shared_instance
  if (has_parameter?(:value) || has_parameter?(:asserted_value)) &&
      !has_parameter?(:read_length)
    extend WarnNoReadLengthPlugin
  end
  super
end

#snapshotObject



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bindata/string.rb', line 71

def snapshot
  # override to trim padding
  snap = super
  snap = clamp_to_length(snap)

  if get_parameter(:trim_padding)
    trim_padding(snap)
  else
    snap
  end
end