If the value in the server is signed 16 bits, when reading you will get the same signed 16 bits (Int16) without conversion. If not, I will need a reproducible scenario, but I highly doubt that is the case.
Writing is separate. First, nothing prevents you to convert the value to the type you like. Second, assuming that were are talking about OPC Classic and not OPC UA, any OCP compliant server is supposed to make the necessary conversions upon writing, so it does not really mater what type you write in, as long as the value fits.
I am using QuickOPC 2019.1 and i am experiencing a problem i've never had with the previous version. When i try to read 16bit int, the value i get is a 32bit int. I am sure the value in the PLC is declared as 16bit, and i am also using Matrikon browser for checking and the data type is 16bit int. But the data i get is a 32bit int, meaning that even if i can read it in some way, i cannot write to the PLC, getting an exception.
Is this an issue or am i doing something wrong? Please notice that the only thing that is changed from previous version is only the quickOPC version, i have changed nothing in my code and it worked perfectly.