# Bytes and String in Solidity 

By [Hicss](https://paragraph.com/@freesuton) · 2023-03-11

---

1.

If we know the size of the bytes we want to store, the best approach is to use the fixed size byte array type

To initialize a fixed size byte array, we need to specify the size of how many bytes we would like to store.

    bytes1 b1 = hex"41";
    

Bytes can be initialized with either a hex string `hex"41"` or a hex value `0X41` which is the letter `A` according to ASCII.

2.

Fixed size bytes can be passed between smart contracts in the Solidity programming language.

3.**bytes and bytes32**

Bytes is a dynamic array of bytes. It's shorthand for byte\[\] and you'll see examples of a bytes being treated as an array in code from time to time. `myByte[x]`. It can have a length of zero and you can do things like append a byte to the end.

Bytes32 is exactly 32 bytes long. It takes exactly one 32-byte word to represent a bytes32 because there's no need to set any space aside to encode the length. The length is always 32. A bytes with 32 bytes of data needs additional encoding to deal with variable length.

4.**Converting to bytes**

Converting a string to bytes is a straightforward task. We need to initialize bytes passing in the string type. In return, we get a dynamic array of bytes.

    bytes memory stringBytes = bytes("This is string");
    

If we want to convert to the `bytes32` type, we need to go to the assembly level and write the string on the memory.

    bytes32 result;
    
    assembly {
      result := mload(add("This is string", 32))
    }
    

Keep in mind that we can write only up to 32 bytes.

5.**Converting from bytes**

In Solidity language, we can convert back the string value to a dynamic size array of bytes. We can’t convert to fixed string bytes because the string type has an unknown size.

    bytes memory bytesData = hex"41";
    string memory stringData = string(bytesData);

---

*Originally published on [Hicss](https://paragraph.com/@freesuton/bytes-and-string-in-solidity)*
