[英]divide uint64_t data containing N decimal digits into two uint32_t and trim the output in C
我需要将两个部分分成高8位小数位数,低8位小数位数,我不会写代码的所有细节。 (例如内存分配等),以数据类型为uint64_t *的N个十进制数字为输入,然后将前8个数字分为两个8个十进制数字,然后是后8个数字(uint32_t数据类型),因此如果有更多的数字,则为修剪。 (请理解我是新手。因此,如果代码中有错误,请多加解释,仅批评而不加以解释对新手无济于事)
预期代码将像这样工作:假设: uint8_t* data_64b
作为输入已包含N个十进制数字。
例1)
1234567803456789
作为uint64_t* data_64bits
输入(16个十进制数字) 12345678
或03456789
。 eg2)
98765432155555553
98765432
或15555555
编码:
// @Input: unit8_t id input identifier
// @input: uint64_t* data_64bits input parameter , assume it contains N decimal digits number
// @output: uint32_t* data_32bits output parameter to return the divided each 8 decimal digits
dataFrom64To32bits( uint8_t id, uint64_t* data_64bits, uint32_t* data_32bits )
{
uint8_t* data_64bits; /* 64bits */
#if 0
/* [A] My original thoughts, but I have told this is not necessary.
because the data contains decimal digits
[Q1] really don't need this? */
uint32_t 4BytesLSB;
uint32_t 4BytesMSB;
4BytesLSB = data_64bits & 0xFFFFFFFF; /* obtains the 4 LSB */
4BytesMSB = (data_64bits & 0xFFFFFFFF00000000) >> 32; /* obtains the 4 MSB */
#endif
#if 1
/* [B] I have got advice like this,
and have told that it will be enough doing like this
for 8 decimal digits for high part, low part to divide.
[Q2] Does this really make sense? and will give the result? */
if(id == id_highpart)
{
*data_32bits = ( *data_64bits / 100000000 ) % 100000000;
}
else if(id == id_lowpart)
{
*data_32bits = *data_64bits % 100000000;
}
#endif
}
剂量有意义吗?
有一部分告诉我,这是没有必要的。 建议提供预期效果的B部分请查看代码中的[Q1],[Q2]。
另外,将其余部分从代码的某些部分中剔除的权利是什么? 修剪还是其他? 提前致谢
另外,将其余部分从代码的某些部分中剔除的权利是什么? 修剪还是其他?
要在16号之后舍弃数字,请除以10,直到没有数字为止(提取各部分之前):
while (*data_64bits > 9999999999999999ll) *data_64bits /= 10;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.