在PHP中定义一个未签名的CHAR

dpi*_*dpi 2 php int types integer imagemagick

一个简单的简单问题,但我找不到PHP网站上的文档.

我正在使用ImageMagick,我将像素导出为CHAR

$pixels = $im->exportImagePixels(0, 0, $im->getImageGeometry()['width'], $im->getImageGeometry()['height'], "RGB", Imagick::PIXEL_CHAR);
Run Code Online (Sandbox Code Playgroud)

我需要定义新的像素,我希望它们是CHAR类型.当我在sigle像素上使用var_dump时,PHP将它们识别为整数.现在我看到php没有CHAR数据类型,所以我想定义一个两字节无符号整数,如下所示:

我的像素定义为$ pixel = 134; 范围从0到255

我想像这样定义相应的char:

0xFF & $pixel
Run Code Online (Sandbox Code Playgroud)

它不起作用.

任何人都知道为什么?或者我该怎么办?我试图使用PIXEL_FLOAT数据类型,但它真的很重,它会在更大的图片上崩溃我的脚本.

谢谢任何人.

Joh*_*sus 5

使用功能:

function printPacked($base, $packed_value)
{
    $value = unpack($base, $packed_value);
    printf("%08x \n", $value[1]);
}

// Unsigned char
//
$oldpixel = pack( "C", 0xFF );
printPacked("C", $oldpixel);

// Unsigned short, little-endian
//
$newpixel = pack( "v", 0xCDEF );
printPacked("v", $newpixel);

// Assign the short to the char
//
$oldpixel = $newpixel;
printPacked("C", $oldpixel);

// Mask operation on the char
//
$oldpixel = $oldpixel & pack( "C", 0xAB );                                      
printPacked("C", $oldpixel);
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是:

000000ff 
0000cdef 
000000ef 
000000ab
Run Code Online (Sandbox Code Playgroud)