从64位十六进制值中获取四个16位数字

abe*_*bel 1 hex

我经历过以下相关问题:

但我没有得到答案可能是因为我不理解64位或16位值.

我在Picasa和脸部检测上发布了一个问题,使用Picasa所做的脸部检测来从包含许多照片的照片中获取个人照片.使用API​​自动进行人脸检测

回答 @Joel马丁内斯链接到一个答案Picasa帮助其说:

rect64()中包含的数字是64位十六进制数.

  • 将其分成四个16位数字.
  • 将每个除以最大无符号16位数(65535),并且在0和1之间有四个数字.

全文

@oedious写道: - 这有点技术性,所以坚持下去.*rect64()中包含的数字是64位十六进制数.*将其分成四个16位数字.*除以最大无符号16位数(65535),并且在0和1之间有四个数字.*剩下的四个数字给出面部矩形的相对坐标:(左,上,右,下).*如果您想要以绝对坐标结束,请按图像宽度左右多个,按图像高度左右多个.

一个示例picasa.ini文件:

[1.jpg]
backuphash=65527
faces=rect64(5520c092dfb2f8d),615eec1bb18bdec5;rect64(dcc2ccf1fd63e93e),bc209d92a3388dc3;rect64(52524b7c785e6cf6),242908faa5044cb3
crop=rect64(0)
Run Code Online (Sandbox Code Playgroud)

如何从64位十六进制中获取4个数字?

对不起人,目前我不明白答案.我想我必须学习一些C++(我是一名PHP和Java Web开发人员,数学上有弱点),然后才能进入并编写一些可以在一些坐标的帮助下将图像切割成多个图像的东西.我期待到代码实验室为Paint.net创建插件的

Bli*_*ndy 7

如果你想要基础知识,请说你有这个十六进制数字:

4444333322221111

我们将它分成纸上的4个部分,所以剩下的就是提取它们.这包括使用ffff遮罩除了我们的数字之外的其他所有东西(不f掩盖任何东西,0掩盖所有东西)并在每个部分上滑动它.所以我们有:

part 1: 4444333322221111 & ffff             = 1111
part 2: 4444333322221111 & ffff0000         = 22220000
part 3: 4444333322221111 & ffff00000000     = 333300000000
part 4: 4444333322221111 & ffff000000000000 = 4444000000000000
Run Code Online (Sandbox Code Playgroud)

剩下的就是删除最后的0.总而言之,在C中,你写的是:

int GetPart(int64 pack, int n) // where you define int64 as whatever your platform uses
{                              // __int64 in msvc
  return (pack & (0xffff << (16*n)) >> (16*n);
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,你计算掩码为0xffff(2个字节)移动到右边16*n位(第一个为0,第二个为16,第三个为32,第四个为48),将其应用于数字以掩盖除了我们感兴趣的部分之外的所有内容,然后将结果移回16*n位以清除那些0的结尾.

一些额外的阅读:C中的按位运算符.

希望有所帮助!