In opencv 2.2, I'd use the C++ interface.

cv::Mat in = /* your image goes here, 
                assuming single-channel image with 8bits per pixel */
for(int row = 0; row < in.rows; ++row) {
    unsigned char* inp  = in.ptr<unsigned char>(row);
    for (int col = 0; col < in.cols; ++col) {
        if (*inp++ == 0) {
            std::cout << '1';
        } else {
            std::cout << '0';
        }
        std::cout << std::endl;
    }
}

IplImage struct have a variable char* imageData - it's just a buffer of all pixels. To read it properly you have to know your image format. For example for RGB888 image 3 first chars in imageData array will represent the r,g,b values of the first pixel at the first row. If you know the image format - you can read the data properly. Image format can be restored reading another values of IplImage structure:

http://opencv.willowgarage.com/documentation/basic_structures.html

Also i think it's more efficient to write the loop like this:

uchar r,g,b;

for (int y = 0; y < cvFrame->height; y++)
{
    uchar *ptr = (uchar*) (cvFrame_->imageData + y*cvFrame_->widthStep);
    for (int x = 0; x < cvFrame_->width; x++)
    {       
        r = ptr[3*x];
        g = ptr[3*x + 1];
        b = ptr[3*x + 2];
    }
}

This code is for RGB888 image