How does Abe or any blockchain explorer determine transaction size? I was looking over the Abe code once again, and came to a stumbling point. I can't understand how this is accurate:

tx['size'] = len(tx['tx'])


Transaction size is simply the length of the raw transaction string? I did not think that 1 character of that string was equal to one byte. 

Edit: while tinkering around with this with a simple python command line program, I was able to determine that the block size is actually half of the raw transaction string length. I also found out this: 

http://en.wikipedia.org/wiki/Hexadecimal


  Each hexadecimal digit represents four binary digits (bits), and the primary use of hexadecimal notation is a human-friendly representation of binary-coded values in computing and digital electronics. One hexadecimal digit represents a nibble, which is half of an octet or byte (8 bits).


Though it still doesn't answer the question, why isn't the size divided by two in the ABE source code?
What you are looking at is the length of a string of hexadecimal characters. When representing data has a hex string, one byte is represented with two characters.  However the software does not store the block or transaction data as a hex string, it just stores it as an array of bytes which is later represented as a hex string with each byte having 2 characters. So when the software gets the size of the transaction, it just gets the number of bytes stored in the array, and since each byte corresponds to 2 characters in hexadecimal, when you get the hex string, the hex string will be twice as long as the number of bytes that the block or transaction actually is.