将具有9位数字的整数解析为颜色数组

福赛思11

我有一个九位数的数组,范围为0-999,999,999。我希望能够将它们解析为Colors数组然后,我希望能够将颜色数组转换回数字数组。

这就是我想要做的:

Color[] colors = encode(intEnter);//intEnter is any integer which is 8 or 9 characters long.
int decode = decode(colors);//returns intEnter

我想做新的Color(999,999,999),但它最多支持255。

如何创建一个颜色数组来编码比rgb支持的数字更大的数字,然后将其解码回去?

二恶英

与其组合3个字节以形成9位整数,不如使用3个字节来创建颜色。你必须先unsign他们,虽然,以抵消范围0255,而不是-128127

假设您有一个byte[]大小为100_000满字节的:

byte[] bytes = new byte[100_000];

new Random().nextBytes(bytes); //fills array with bytes; simulates bytes from stream

无符号字节值不能适合byte,因此我们必须使用short[]int[]要将带符号的字节转换为无符号的字节,我们使用按位&255(通常称为0xff):

int[] unsign(byte[] bytes) {
    int[] unsignedBytes = new int[bytes.length];

    for(int i = 0; i < unsignedBytes.length; i++) {
        unsignedBytes[i] = bytes[i] & 0xff;
    }

    return unsignedBytes;
}

要将这些分组为3s,我们首先需要确保将字节数除以3。例如,如果我们有个数组[101, 74, 88, 21],则可以删除21来创建颜色,也可以添加20来创建2种颜色。 。第一种选择会导致数据丢失,因此我们将选择第二种选择:

int[] sizeArray(int[] unsignedBytes) {
    int length = unsignedBytes.length;
    int bytesPerColor = 3;
    int remainder = length % bytesPerColor;
    int bytesNeeded = bytesPerColor - remainder;

    int numOfBytes = remainder > 0 ? length + bytesNeeded : length;
    int[] sizedArray = new int[numOfBytes];
    System.arrayCopy(unsignedBytes, 0, sizedArray, length);

    return sizedArray;
}

现在进行编码。每3个字节,我们就会生成一种颜色:

Color[] encode(int[] unsignedBytes) {
    Color[] colors = new Color[unsignedBytes.length / 3];

    for(int i = 0, position = 0; i < colors.length; i++) {
        int r = unsignedBytes[position++];
        int g = unsignedBytes[position++];
        int b = unsignedBytes[position++];

        colors[i] = new Color(r, g, b);
    }

    return colors;
}

要进行解码,只需从每种颜色中获取RGB值:

int[] decode(Color[] colors) {
    int[] unsignedBytes = new int[colors.length * 3];

    int position = 0;
    for(Color color : colors) {
        unsignedBytes[position++] = color.getRed();
        unsignedBytes[position++] = color.getGreen();
        unsignedBytes[position++] = color.getBlue();
    }

    return unsignedBytes;
}

要对字节进行签名,只需将其转换回字节即可:

byte[] sign(int[] unsignedBytes) {
    byte[] signedBytes = new byte[unsignedBytes.length];

    for(int i = 0; i < signedBytes.length; i++) {
        signedBytes[i] = (byte) unsignedBytes[i];
    }

    return signedBytes;
}

您可以有一个EncoderandDecoder类,如果需要,可以为您进行签名和取消签名:

class Encoder {
    public Color[] encode(byte[] signedBytes) {
        return encode(unsign(signedBytes));
    }

    public Color[] encode(int[] unsignedBytes) {
        //...
    }

    private int[] unsign(byte[] signesBytes) {
        //...
    }
}

class Decoder {
    public byte[] decode(Color[] colors) {
        //receive unsigned bytes from colors

        return sign(unsignedBytes);
    }

    private byte[] sign(int[] unsignedBytes) {
        //...
    }
}

用手机写了这个,所以如果有什么问题请告诉我

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring唯一ID为具有9位数字的整数-未排序

来自分类Dev

具有1000位数字的字符串,查找没有数组的最大5位数字

来自分类Dev

将numpy数组合并为单个整数,每个数字含2位数字

来自分类Dev

将位整数值放入位数组

来自分类Dev

正则表达式在仅应显示10位数字的情况下将电话号码显示为有效的9位和10位数字

来自分类Dev

NSCalendarUnitDay将当前日期显示为一位整数。如何使它成为2位数字,例如“ 03”?

来自分类Dev

具有1000位数字的字符串,使用子字符串方法查找没有数组的最大5位数字

来自分类Dev

将char数组解析为具有函数的数组

来自分类Dev

将char数组解析为具有函数的数组

来自分类Dev

数组中的4位数字为String

来自分类Dev

将空格分隔的整数字符串解析为经过过滤的整数数组

来自分类Dev

正则表达式JSON模式字段必须具有1-9位数字,但拒绝没有其他数字的1-9个零

来自分类Dev

输入type = number:当点后有3位数字时,Firefox将浮点数转换为整数

来自分类Dev

输入type = number:当点后有3位数字时,Firefox将浮点数转换为整数

来自分类Dev

给定正整数n,如果包含1位数字,则打印“具有1”,否则,显示“具有否1”。

来自分类Dev

NSCalendarUnitDay将当前日期显示为一位整数int。如何使它成为2位数字,例如“ 03”?

来自分类Dev

Python:如何将4位数字数组按位转换为更大的数字?

来自分类Dev

Python:如何将4位数字数组按位转换为更大的数字?

来自分类Dev

该程序可以正常工作,最多9位数字,但失败时只有10位数字

来自分类Dev

将8位整数数组移动到32位数组组合件

来自分类Dev

为什么十六进制颜色的每种颜色都有2位数字?

来自分类Dev

将包含数字的字符串解析为整数数组

来自分类Dev

如何将一串数字解析为一个整数数组?

来自分类Dev

Kibana查询具有4位数字的句子(具有特定顺序的单词)

来自分类Dev

如何测试整数的第一位数字是否为7?

来自分类Dev

将字节数组解码为最多 64 位的有符号整数

来自分类Dev

如果库具有32位限制,如何在Arduino上输出64位数字?

来自分类Dev

在WebAssembly中,同时具有32位和64位数字的理由是什么?

来自分类Dev

生成一个小于4位数字的随机数,但它具有1位,2位或3位数字的概率相等

Related 相关文章

  1. 1

    Spring唯一ID为具有9位数字的整数-未排序

  2. 2

    具有1000位数字的字符串,查找没有数组的最大5位数字

  3. 3

    将numpy数组合并为单个整数,每个数字含2位数字

  4. 4

    将位整数值放入位数组

  5. 5

    正则表达式在仅应显示10位数字的情况下将电话号码显示为有效的9位和10位数字

  6. 6

    NSCalendarUnitDay将当前日期显示为一位整数。如何使它成为2位数字,例如“ 03”?

  7. 7

    具有1000位数字的字符串,使用子字符串方法查找没有数组的最大5位数字

  8. 8

    将char数组解析为具有函数的数组

  9. 9

    将char数组解析为具有函数的数组

  10. 10

    数组中的4位数字为String

  11. 11

    将空格分隔的整数字符串解析为经过过滤的整数数组

  12. 12

    正则表达式JSON模式字段必须具有1-9位数字,但拒绝没有其他数字的1-9个零

  13. 13

    输入type = number:当点后有3位数字时,Firefox将浮点数转换为整数

  14. 14

    输入type = number:当点后有3位数字时,Firefox将浮点数转换为整数

  15. 15

    给定正整数n,如果包含1位数字,则打印“具有1”,否则,显示“具有否1”。

  16. 16

    NSCalendarUnitDay将当前日期显示为一位整数int。如何使它成为2位数字,例如“ 03”?

  17. 17

    Python:如何将4位数字数组按位转换为更大的数字?

  18. 18

    Python:如何将4位数字数组按位转换为更大的数字?

  19. 19

    该程序可以正常工作,最多9位数字,但失败时只有10位数字

  20. 20

    将8位整数数组移动到32位数组组合件

  21. 21

    为什么十六进制颜色的每种颜色都有2位数字?

  22. 22

    将包含数字的字符串解析为整数数组

  23. 23

    如何将一串数字解析为一个整数数组?

  24. 24

    Kibana查询具有4位数字的句子(具有特定顺序的单词)

  25. 25

    如何测试整数的第一位数字是否为7?

  26. 26

    将字节数组解码为最多 64 位的有符号整数

  27. 27

    如果库具有32位限制,如何在Arduino上输出64位数字?

  28. 28

    在WebAssembly中,同时具有32位和64位数字的理由是什么?

  29. 29

    生成一个小于4位数字的随机数,但它具有1位,2位或3位数字的概率相等

热门标签

归档