3

I'm writing a client for a binary socket protocol in PHP, and it's a pain. I'm currently using pack to convert numbers into binary strings, but it's lacking. Two options pack has are:

  • Write a signed 32 bit integer in machine byte order
  • Write an insigned 32 bit integer in big endian byte order

But I need to write signed 32 bit integers in big endian order, as with Java's DataOutputStream.writeInteger. pack doesn't have that option.

Is there a way to do this with pack, or to transform the output of pack, or maybe a better library for working with binary data in PHP?

1

2 Answers 2

2

Do you use the Zend Framework? If so, you can use the function Zend_Io_Writer::writeInt32BE()

Writes signed 32-bit integer as big-endian ordered binary data to the stream.

Or else you should take a look at the ZF-source how these guys handle this.

Sign up to request clarification or add additional context in comments.

Comments

0

The specification for PHP's pack() says that the unsigned/signed distinction only matters for unpack(), not pack().

So just use the 32 bit network byte order option (N).

2 Comments

+ 4 billion, doesn't that result in the same number? I also suspect this isn't very portable, see stackoverflow.com/questions/300840/force-php-integer-overflow
@Bart vna Heukelom: On further reflection, and checking the documentation, you can just use the unsigned option.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.