Integers are 32 bits, and four hex digits only describe the least 16 bits. The actual hex representation of -256 over 32 bits would be FFFFFF00. If you try the expression CInt("&HFFFFFF00") you should get the expected result. The difference between the case you build the string representation yourself and when you hardcode the hex value is the "S". In the case you hardcoded the value, you expressly identified the constant as a short integer. When you convert from a short int to an int, the most significant bit is left extended to preserve the sign of the number. So CInt(&HFF00S) gives -256, CInt(&HFFFFFF00) should give 65280.