// Examples
// uint8 - store first number - little endian
[0][0][0][0] [1][1][1][1] = 15 // storing in 4 bits the max value
// uint8 adding value of 3 as second value in big endian
[1][1][0][0] [1][1][1][1]
// uint16 store first number - little endian
[0][0][0][0][0][0][0][0] [1][1][1][1][1][1][1][1] = 255 // storing in 8 bits the max value
7条答案
按热度按时间i2loujxw1#
您可以将它们转换为字符串,添加它们,然后将它们转换回来(这与第二个选项相比效率不高)
或者更“数学”的方式(仅当
num2
仅为数字时有效)w6mmgewl2#
我想你是想把两个字符串连接起来。
Convert the int to string然后concatenate the two strings这将从字符串“2”和“6”中给予串联字符串“26”如果你需要int 26,那么你可以在串联后将convert it back转换为int。祝你好运:-)
wecizke33#
那么,如果只是将相乘的数字相加并推到它们想要的位置呢?
nwwlzxa74#
您可以使用按位操作将多个整数存储为一个整数。
对于您提供的示例:
然后,您可以使用4位连接数字:
或者如果你使用3位,那么它变成:
要检索回数字,您必须对
num3
进行右移以获得num 1,并与2的位数幂-1(2 ^ n - 1, where n = number of bits
)进行位与运算。对于4位,num 3 = 38;
对于3位,num 3 = 22:
希望这个有用。
m2xkgtsf5#
有点晚,但是:
你可以用这两个整数组成一个字符串,然后把它转换回字符串。
下面是我的更简单但更大的代码:
这是我最小的一个:
也许没有其他例子那么有效,但如果有两位数,它也可以工作。
plupiseo6#
这似乎是一个老问题,我也想拥有这种能力。
因为还没有人提到这一点,如果你有一个阈值,可以验证数字是否低于范围上限,你可以做的是通过单独存储它们的位来将两个数字存储在一个数字类型中。
您可以存储第一个数字,将位设置为little endian,对于第二个数字,您可以将位存储为big endian。
然后你可以将其抽象为只使用字节作为大小,字节的长度取决于你的arch,通常1字节是8位,这意味着使用uint16(2字节),我们可以将每个数字限制为一半的空间,因为在每个存储的数字中需要是uint8。
如果我们存储在uint8中,那么两个数字都应该在4位内表示。
这对于小数目是有用的,因为有明显的限制。
因此,如果存储在4位中,则最大值为15,如果存储在8位中,则最大值为255,存储在上面的任何内容都将溢出并损坏其他存储值。
显然,当你不需要进一步分区时,把它们当作小字节序和大字节序只对两个数字有效,因为这有助于考虑它们是如何存储的。而且可能有库可以自动帮助进行字节序表示。
但是你可以按照你想要的位数来划分字节,只是如果不使用字节顺序,你可能需要手动进行更多的转换。
分区也是intotito的答案,但很少有答案指出你需要一个上限阈值为您的价值观,否则它只是一个加载的脚枪。
wfveoks07#
你必须将它们存储为字符串,以便像这样连接它们:
这是一个糟糕的方法,因为如果你使用任何数字,而不是1位数,它将变得太复杂,存储和/或拉出数据。
使用矢量或矢量对。更简单,更少麻烦:
vector应该是最好的,因为它可以容纳任意大数量的int