# What is a string?¶

Strings can be created with quotation marks

In [77]:
str="hello world ðŸ˜€"

Out[77]:
"hello world ðŸ˜€"

We can access characters of a string with brackets:

In [84]:
str[1],str[13]

Out[84]:
('h','ðŸ˜€')

Spaces are also characters

In [80]:
str[6]

Out[80]:
' '

Each character is a bit type, in this case using 32 bits/8 bytes:

In [82]:
typeof(str[6]), length(bits(str[6]))

Out[82]:
(Char,32)

Strings are not bit types, but rather point to the start of sequence of Char in memory. In this case, there are $32*13=416$ bits/52 bytes in memory

# What is a Vector?¶

We can create a vector using brackets:

In [83]:
v=[11,24,32]

Out[83]:
3-element Array{Int64,1}:
11
24
32

Like a string, elements are accessed via brackets:

In [85]:
v[1],v[3]

Out[85]:
(11,32)

Accessing outside the range gives an error

In [86]:
v[4]

LoadError: BoundsError: attempt to access 3-element Array{Int64,1}:
11
24
32
at index [4]
while loading In[86], in expression starting on line 1

in getindex at array.jl:282

Vectors can be made with different types, for example, here is a vector of 3 8-bit integers:

In [87]:
v=[Int8(11),Int8(24),Int8(32)]

Out[87]:
3-element Array{Int8,1}:
11
24
32

Just like strings, Vectors are not bit types, but rather point to the start of sequence of the corresponding type. In this last case, there are $3*8=24$ bits/3 bytes in memory

# Parsing strings¶

We can use the command parse to turn a string into an integer

In [88]:
parse(Int,"123")

Out[88]:
123

We can specify base 2 by adding a 2 at the end:

In [90]:
bts="00000000000000011111011001001010"
x=parse(Int32,bts,2)

Out[90]:
128586

reinterpret allows us to reinterpret the resulting sequence of 32 bits as a different type, for example, a Char

In [91]:
reinterpret(Char,x)

Out[91]:
'ðŸ™Š'