There are many block-cipher modes.
CBC for example works only on full blocks of plaintext and produces ciphertext as a multiple of the block size, it is therefore not applicable to your case.
CTR transforms a block-cipher into a stream-cipher, which produces a ciphertext that has the same length as the plaintext. This mode requires the use of a nonce as an IV. If no such nonce is used and the key doesn't change, an attacker may deduce the contents of the plaintexts only by observing multiple ciphertexts because of the many-time pad.
The nonce doesn't have to be secret, but it has to be used only once per key. Usually, this nonce is sent along with the ciphertext, but this would increase the encrypted data, which is not applicable in your situation.
Another way is to have a stateful encryptor, which manages a counter. For every encryption, it would increment the counter, write it back to disk and use the value as a nonce for the next message. If two parties are communicating with the same key, one party may use only odd nonces and the other only even nonces. This is secure and applicable, but requires state at the encryptor.
While Format-Preserving Encryption (FPE) is a general primitive of achieving this sort of encryption where the ciphertext has the same size (and character set) as the plaintext, it is not widely implemented or used.
Ciphertext stealing (CS) is another alternative based on block-ciphers to produce ciphertext of the same size, but is easier to implement than FPE. Those are usually defined as extensions to non-streaming modes for block-ciphers. The Wikipedia page shows examples for ECB and CBC modes with ciphertext stealing. They can operate deterministically like FPE and the many-time pad attack as in CTR mode is not applicable. The only problem is that ciphertext stealing is only possible for plaintexts larger than a single block when the IV is static.
CS example for ECB:
Deterministic encryption as with FPE and (ECB/CBC)-CS enables you keep the same ciphertext size as plaintext size, where FPE additionally enables you to keep the same character set. Since those are not randomized, an attacker might be able to compare the ciphertexts of multiple plaintexts to determine whether the same plaintext was previously sent.
If a state is possible, then CTR or another streaming-mode is likely the better option as it provides randomization.