Data is stored in a flash or other memory using a look-up table, which includes a plurality of data elements, to encode and decode the data. An amount of charge to be stored in each memory cell is calibrated to correspond to one of the data elements in the look-up table. Data is retrieved from the memory by decoding using the look-up table. The amount of charge in the memory cells is determined, for example, by reading a voltage level from the cell. The charge or voltage level is matched to a corresponding one of the data elements in the look-up table.