Marcus McGowan, 51, was snorkelling on the Great Barrier Reef, about 28km east of Haggerstone Island, when he was attacked by what he thought was a shark.
He soon realised the animal was in fact a saltwater crocodile, which had tried to snap him up for lunch.
Releasing a statement from his hospital bed, McGowan described the moment he was "attacked from behind".
"I was attacked from behind by a saltwater crocodile which got its jaws around my head," he said in a statement.
"I thought it was a shark but when I reached up, I realised it was a crocodile.
Six-metre saltwater crocodile seen eating juvenile croc during Aussie river cruise
"I was able to lever its jaws open just far enough to get my head out.
"The crocodile then attempted to attack me a second time, but I managed to push it away with my right hand, which was then bitten by the croc."
A nearby tourist group full of Brisbane locals managed to get the man onto a boat and then to the mainland, where they managed to stop the bleeding.
He was airlifted to Thursday Island Hospital in a stable condition, where he was treated for superficial wounds.
Haggerstone Island is 600km away from Cairns.
Sign up here to receive our daily newsletters and breaking news alerts, sent straight to your inbox.