#include #include #include void byteswap_4(char *b, int size) { while (size >= 4) { char b0 = b[0]; char b1 = b[1]; b[0] = b[3]; b[1] = b[2]; b[2] = b1; b[3] = b0; size -= 4; b += 4; } } void byteswap_2(char *b, int size) { while (size >= 2) { char b0 = b[0]; b[0] = b[1]; b[1] = b0; size -= 2; b += 2; } } #define BUFSIZE 4096 /* should be multiple of 4 */ int main(int argc, char **argv) { FILE *in = stdin; FILE *out = stdout; char buf[BUFSIZE]; int mode = 4; if (argc >= 2) { if (!strcmp(argv[1], "--help")) { printf( "Usage: byteswap [-2] outfile\n" "\n" "-2 means 16 bit word byteswap.\n" "Otherwise it does 32 bit word byteswap.\n" "Stdin and Stdout are used.\n" ); exit(0); } else if (!strcmp(argv[1], "-2")) mode = 2; } while (!feof(in)) { int n= fread(buf, 1, BUFSIZE, in); if (mode == 2) byteswap_2(buf, n); else byteswap_4(buf, n); fwrite(buf, 1, n, out); } return 0; }