It can be done in one or two lines with bit slicing, however you need to check if your synthesizer property generates it.
header_buffer[8*address +: 8] <= writedata;
If the address could go out of range (ex address==100 and max is 95) then you should use if condition:
if (address < MAX_ADDRESS)
header_buffer[8*address +: 8] <= writedata;
Description and examples can be found in IEEE Std 1800-2012 § 11.5.1 Vector bit-select and part-select addressing. First IEEE appearance is IEEE 1364-2001 (Verilog) § 4.2.1 Vector bit-select and part-select addressing. You may also want to check out a previously answered question on Indexing vectors and arrays with +:
Word of caution. Despite the fact that bit slicing has been part of the standard since Verilog-2001, not all tools have fully implemented bit slicing with proper optimization. Some times a traditional full case statement will generate better results even though the two are functionally identical.