This words fine for the array, but when i use a uint16 it won't allow it, as "handleValPair.value.val" is a uint8. If someone could help me with this or point me in the direction of a good example of how to read/write characteristic values it would be much appreciated. Thanks in advance.

First of all, this is not a Read operation on a characteristic but rather a Write operation from Client to Server. I guess that is what you meant.

Coming to array vs uint16, you can consider the uint16 as an array too, with the size of 2 bytes. The first byte you receive is the LSB and the second byte is MSB. You can reconstruct the uint16 value as below: