@@ -83,19 +83,29 @@ module.exports = function toBuffer(data, encoding) {
8383 // 8-bit values have no endianness
8484 outputView . setUint8 ( offset , value ) ;
8585 } else if ( elemSize === 2 ) {
86- // 16-bit values - write as little-endian
87- outputView . setUint16 ( offset , value , true ) ;
86+ // 16-bit values - handle signed vs unsigned
87+ if ( value < 0 ) {
88+ outputView . setInt16 ( offset , value , true ) ;
89+ } else {
90+ outputView . setUint16 ( offset , value , true ) ;
91+ }
8892 } else if ( elemSize === 4 ) {
8993 // 32-bit values - check if it's a float
9094 if ( typeof value === 'number' && ! Number . isInteger ( value ) ) {
9195 outputView . setFloat32 ( offset , value , true ) ;
96+ } else if ( value < 0 ) {
97+ outputView . setInt32 ( offset , value , true ) ;
9298 } else {
9399 outputView . setUint32 ( offset , value , true ) ;
94100 }
95101 } else if ( elemSize === 8 ) {
96102 // 64-bit values - check if it's a BigInt or float
97103 if ( typeof value === 'bigint' ) {
98- outputView . setBigUint64 ( offset , value , true ) ;
104+ if ( value < 0n ) {
105+ outputView . setBigInt64 ( offset , value , true ) ;
106+ } else {
107+ outputView . setBigUint64 ( offset , value , true ) ;
108+ }
99109 } else if ( typeof value === 'number' ) {
100110 outputView . setFloat64 ( offset , value , true ) ;
101111 } else {
0 commit comments