Your B array has only 7 entries and not 8 but you access the 8th (B[7]) when using digitalWrite().
for(byte nBitNo= 0; nBitNo < 8; nBitNo++)
digitalWrite(A[nBitNo], bitRead((byte)myChar, nBitNo));
This does the same without the intermediate array B. HIGH is defined as 0x01 and LOW as 0x00.
Additionally I think you have to reverse array A, because in your example D0 is the most significant bit and you set it at A[0] / bitRead(..., 0) which handles the least significant bit.