public void putNumeric(BigInteger value, int code) {
		// Drop bits. Letting value become signed too.
		BigInteger arg = value.and(new BigInteger("ffffffffffffffff", 16));
		long longValue;
		try {
			longValue = value.longValueExact();
		}
		catch (ArithmeticException e) {
			// Should not happen since we "ANDed" the value.  Fail silently
			return;
		}
		switch (code) {
			// For each case, parse bytes (to move index forward) and throw bytes away.
			//  The number of bytes parsed is based on the size of the integral type
			//  represented by subTypeIndex.
			case 0x8000: // char
				putUnsignedShort(code);
				putUnsignedByte((int) (longValue & 0xff));
				break;
			case 0x8001: // short
				putUnsignedShort(code);
				putShort((short) (longValue & 0xffff));
				break;
			case 0x8002: // unsigned short
				putUnsignedShort(code);
				putUnsignedShort((int) (longValue & 0xffff));
				break;
			case 0x8003: // 32-bit
				putUnsignedShort(code);
				putInt((int) (longValue & 0xffffffff));
				break;
			case 0x8004: // unsigned 32-bit
				putUnsignedShort(code);
				putUnsignedInt(longValue & 0xffffffff);
				break;
			case 0x8009: // 64-bit
				putUnsignedShort(code);
				putLong(longValue);
				break;
			case 0x800a: // unsigned 64-bit
				putUnsignedShort(code);
				putUnsignedLong(arg);
				break;
			default:
				return; // Fail silently.
		}
	}
Put the data to occupy the next Numeric field in the byte array.  For Numeric definition,
 see the PdbByteReader method for reading such a field.  If value is too large for the
 encoding code, the value is masked.
@param value The BigInteger containing the value to be written into the Numeric field.
@param code The encoding code for representing the Numeric field
Ghidra/Features/PDB/src/test/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbByteWriter.java