将一个负整数转换成一个字节[]8位数组,用于更新图像EXIF数据(GPS纬度);二的补码?

问题描述 投票:0回答:1

我有一个函数可以将三个整数转换成一个字节数组。

private static byte[] FloatToExifGps(int degrees, int minutes, int seconds)
{
    var secBytes = BitConverter.GetBytes(seconds);
    var secDivisor = BitConverter.GetBytes(100);
    var bytedegree = BitConverter.GetBytes(degrees);
    byte[] rv = { (byte)degrees, 0, 0, 0, 1, 0, 0, 0, (byte)minutes, 0, 0, 0, 1, 0, 0, 0, secBytes[0], secBytes[1], 0, 0, secDivisor[0], 0, 0, 0 };
    return rv;     
}

函数SetPropertyItem只接受有三个有理数的byte[]。

如果我使用......函数SetPropertyItem只接受一个字节[],其中有三个有理数。

FloatToExifGps(51, 47, 1234)

那么我就会得到我想要的东西,它会把它转换成一个真正的GPS十进制。

但是,如果我使用一个负整数,那么由于字节二的范围是从0到255,254等,数值就会开始回溯。

因此,例如,如果我试图在这个数字上使用这个函数,则

-1.1159028

它应该出来

-1; 53; 2.7

但是,它将以

255; 53; 3.48

当我使用该数组SetPropertyItem时,它被翻译成字面意思,我得到了一个不可能的gps latlong。文件的图片

我很确定这个问题可以用Two的complment来解决,但是我现在被卡住了。谁能帮帮我?

arrays geolocation twos-complement
1个回答
0
投票

没关系,这不可能做到我想要的。解决的办法是在exif数据中设置N E S W标签。该值可能是正值,但它将被解释为负值与S标签(南方)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.