hex_string 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/README.md +4 -0
- data/hex_string.gemspec +1 -1
- data/lib/hex_string.rb +13 -3
- data/test/hex_string_test.rb +15 -3
- metadata +68 -97
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8408eeb29aa2d5b8344f8f6abe5ccf5e3547c5ce
|
4
|
+
data.tar.gz: d5688b495be3d5cfece1145cadc63a73c5e3ed88
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: de884f446e4ae3daebd96d7a4d00bd4110d964fea9d4c6f81d0205f905f5916cb2adcfba2ee52c8f88172766e6759197213b04152d5ccd671efba9feee94c0c6
|
7
|
+
data.tar.gz: ec780dc2ae34936ab81d84c673ecdabed4505a4986b71360677baf38fc18827dca4ed922bc78c941fa10468f25d28b2044d6e2ebe01f562081b2f4efcbe89b25
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,10 @@ Examples
|
|
24
24
|
>> File.read("/bin/ls")[0..3].to_hex_string
|
25
25
|
=> "ca fe ba be"
|
26
26
|
|
27
|
+
# Omit spaces in hex string output:
|
28
|
+
>> "hello".to_hex_string(false)
|
29
|
+
=> "68656c6c6f"
|
30
|
+
|
27
31
|
Motivation
|
28
32
|
----------
|
29
33
|
When working with binary message or file formats, we often want to have a peek
|
data/hex_string.gemspec
CHANGED
data/lib/hex_string.rb
CHANGED
@@ -19,7 +19,12 @@ module HexString
|
|
19
19
|
raise "Can't translate a string unless it has an even number of digits"
|
20
20
|
end
|
21
21
|
raise "Can't translate non-hex characters" if stripped =~ /[^0-9A-Fa-f]/
|
22
|
-
[stripped].pack('H*')
|
22
|
+
res = [stripped].pack('H*')
|
23
|
+
if RUBY_VERSION =~ /1.8/
|
24
|
+
res
|
25
|
+
else
|
26
|
+
res.force_encoding("ascii-8bit")
|
27
|
+
end
|
23
28
|
end
|
24
29
|
|
25
30
|
# Convert binary data into a human-readable hex string.
|
@@ -32,8 +37,13 @@ module HexString
|
|
32
37
|
# Eg:
|
33
38
|
# >> "hello world".to\_hex\_string
|
34
39
|
# => "68 65 6c 6c 6f 20 77 6f 72 6c 64"
|
35
|
-
def to_hex_string
|
36
|
-
self.unpack('H*').first
|
40
|
+
def to_hex_string(readable = true)
|
41
|
+
unpacked = self.unpack('H*').first
|
42
|
+
if readable
|
43
|
+
unpacked.gsub(/(..)/,'\1 ').rstrip
|
44
|
+
else
|
45
|
+
unpacked
|
46
|
+
end
|
37
47
|
end
|
38
48
|
end
|
39
49
|
|
data/test/hex_string_test.rb
CHANGED
@@ -11,21 +11,29 @@ class HexStringTest < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def fix_encoding(str)
|
15
|
+
if RUBY_VERSION =~ /1.8/
|
16
|
+
str
|
17
|
+
else
|
18
|
+
str.force_encoding("ascii-8bit")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
14
22
|
should "allow human readable hex strings to become actual byte strings" do
|
15
23
|
human = "0102030405060708090a0b0c0d0e0f"
|
16
|
-
expect = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
|
24
|
+
expect = fix_encoding("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f")
|
17
25
|
assert_equal expect, human.to_byte_string
|
18
26
|
end
|
19
27
|
|
20
28
|
should "not care about case of a-f or A-F" do
|
21
29
|
human = "aabbccddeeffAABBCCDDEEFF"
|
22
|
-
expect = "\xaa\xbb\xcc\xdd\xee\xff\xaa\xbb\xcc\xdd\xee\xff"
|
30
|
+
expect = fix_encoding("\xaa\xbb\xcc\xdd\xee\xff\xaa\xbb\xcc\xdd\xee\xff")
|
23
31
|
assert_equal expect, human.to_byte_string
|
24
32
|
end
|
25
33
|
|
26
34
|
should "ignore whitespace of all kinds" do
|
27
35
|
human = "\t\t\taa \t\t bb c\nc d\tdee ffAABBCCDDEEFF\t \n\r"
|
28
|
-
expect = "\xaa\xbb\xcc\xdd\xee\xff\xaa\xbb\xcc\xdd\xee\xff"
|
36
|
+
expect = fix_encoding("\xaa\xbb\xcc\xdd\xee\xff\xaa\xbb\xcc\xdd\xee\xff")
|
29
37
|
assert_equal expect, human.to_byte_string
|
30
38
|
end
|
31
39
|
|
@@ -50,6 +58,10 @@ class HexStringTest < Test::Unit::TestCase
|
|
50
58
|
assert_equal "68 65 6c 6c 6f", "hello".to_hex_string
|
51
59
|
end
|
52
60
|
|
61
|
+
should "convert byte strings into a single hex string without spaces" do
|
62
|
+
assert_equal "68656c6c6f", "hello".to_hex_string(false)
|
63
|
+
end
|
64
|
+
|
53
65
|
should "provide empty hex strings when operating on empty strings" do
|
54
66
|
assert_equal "", "".to_hex_string
|
55
67
|
end
|
metadata
CHANGED
@@ -1,99 +1,81 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: hex_string
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 1.0.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- David Crosby
|
14
8
|
- Micah Alles
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
23
15
|
name: bundler
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- - ">="
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 23
|
31
|
-
segments:
|
32
|
-
- 1
|
33
|
-
- 0
|
34
|
-
- 0
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
35
20
|
version: 1.0.0
|
36
21
|
type: :development
|
37
|
-
version_requirements: *id001
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: rake
|
40
22
|
prerelease: false
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.0.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
51
34
|
version: 0.8.0
|
52
35
|
type: :development
|
53
|
-
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: yard
|
56
36
|
prerelease: false
|
57
|
-
|
58
|
-
|
59
|
-
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.8.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: yard
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
60
46
|
- - ~>
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
hash: 15
|
63
|
-
segments:
|
64
|
-
- 0
|
65
|
-
- 6
|
66
|
-
- 4
|
47
|
+
- !ruby/object:Gem::Version
|
67
48
|
version: 0.6.4
|
68
49
|
type: :development
|
69
|
-
version_requirements: *id003
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: bluecloth
|
72
50
|
prerelease: false
|
73
|
-
|
74
|
-
|
75
|
-
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.6.4
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bluecloth
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
76
60
|
- - ~>
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
hash: 25
|
79
|
-
segments:
|
80
|
-
- 2
|
81
|
-
- 0
|
82
|
-
- 11
|
61
|
+
- !ruby/object:Gem::Version
|
83
62
|
version: 2.0.11
|
84
63
|
type: :development
|
85
|
-
|
86
|
-
|
87
|
-
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.0.11
|
70
|
+
description: String extensions to convert binary data to / from human readable hex
|
71
|
+
tuples.
|
72
|
+
email:
|
88
73
|
- crosby@atomicobject.com
|
89
74
|
- alles@atomicobject.com
|
90
75
|
executables: []
|
91
|
-
|
92
76
|
extensions: []
|
93
|
-
|
94
77
|
extra_rdoc_files: []
|
95
|
-
|
96
|
-
files:
|
78
|
+
files:
|
97
79
|
- .gitignore
|
98
80
|
- .yardopts
|
99
81
|
- Gemfile
|
@@ -102,39 +84,28 @@ files:
|
|
102
84
|
- hex_string.gemspec
|
103
85
|
- lib/hex_string.rb
|
104
86
|
- test/hex_string_test.rb
|
105
|
-
|
106
|
-
homepage: ""
|
87
|
+
homepage: ''
|
107
88
|
licenses: []
|
108
|
-
|
89
|
+
metadata: {}
|
109
90
|
post_install_message:
|
110
91
|
rdoc_options: []
|
111
|
-
|
112
|
-
require_paths:
|
92
|
+
require_paths:
|
113
93
|
- lib
|
114
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
none: false
|
125
|
-
requirements:
|
126
|
-
- - ">="
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
hash: 3
|
129
|
-
segments:
|
130
|
-
- 0
|
131
|
-
version: "0"
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
132
104
|
requirements: []
|
133
|
-
|
134
105
|
rubyforge_project: hex_string
|
135
|
-
rubygems_version:
|
106
|
+
rubygems_version: 2.0.3
|
136
107
|
signing_key:
|
137
|
-
specification_version:
|
108
|
+
specification_version: 4
|
138
109
|
summary: String extensions to convert binary data to / from human readable hex tuples.
|
139
|
-
test_files:
|
110
|
+
test_files:
|
140
111
|
- test/hex_string_test.rb
|