|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 cnjn 于 2019-6-8 08:39 编辑
现在有一个不超过6位数的非负整数,比如15
存到内存中应该就变成了0x0f,占用 sizeof(int) 个字节
可我想让它变成{0x15,0x00,0x00},占用3字节
对应的,
23-->{0x23,0x00,0x00},占用3字节
3456-->{0x34,0x56,0x00},占用3字节
256366-->{0x25,0x63,0x66},占用3字节
这要怎样才能做到?有大佬能指点一下吗?
本帖最后由 人造人 于 2019-6-9 13:57 编辑
被除数为0
然后,我在研究为什么 0 - 12 = 4294967284
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- typedef struct {
- uint32_t original;
- uint8_t *data;
- size_t size;
- } number_t;
- number_t *number_init(uint32_t num)
- {
- uint8_t buff[10]; // uint32_t 最大4294967295
- size_t index = 0;
- uint32_t original = num;
- while(num)
- {
- buff[index++] = num % 10;
- num /= 10;
- }
- number_t *number = malloc(sizeof(number_t));
- number->data = malloc((index + 1) / 2);
- number->size = 0;
- number->original = original;
- for(size_t i = 0; i < index;)
- {
- uint8_t temp = buff[i++];
- if(i < index)
- temp |= (buff[i++]) << 4;
- number->data[number->size++] = temp;
- }
- return number;
- }
- void number_deinit(number_t *number)
- {
- free(number->data);
- free(number);
- }
- void number_print(const number_t *number)
- {
- printf("%u: ", number->original);
- for(size_t i = 0; i < number->size; ++i)
- printf("0x%x ", number->data[i]);
- if(number->original == 0)
- printf("0x%x", 0);
- printf("\n");
- }
- number_t *number_add(const number_t *a, const number_t *b)
- {
- return number_init(a->original + b->original);
- }
- number_t *number_sub(const number_t *a, const number_t *b)
- {
- return number_init(a->original - b->original);
- }
- number_t *number_mul(const number_t *a, const number_t *b)
- {
- return number_init(a->original * b->original);
- }
- number_t *number_div(const number_t *a, const number_t *b)
- {
- return number_init(a->original / b->original);
- }
- int main(void)
- {
- number_t *a = number_init(0);
- number_t *b = number_init(12);
- number_t *sum = number_add(a, b);
- number_t *sub = number_sub(a, b);
- number_t *mul = number_mul(a, b);
- number_t *div = number_div(a, b);
- printf("a -> "); number_print(a);
- printf("b -> "); number_print(b);
- printf("sum -> "); number_print(sum);
- printf("sub -> "); number_print(sub);
- printf("mul -> "); number_print(mul);
- printf("div -> "); number_print(div);
- number_deinit(a);
- number_deinit(b);
- number_deinit(sum);
- number_deinit(sub);
- number_deinit(mul);
- number_deinit(div);
- return 0;
- }
复制代码
- a -> 0: 0x0
- b -> 12: 0x12
- sum -> 12: 0x12
- sub -> 4294967284: 0x84 0x72 0x96 0x94 0x42
- mul -> 0: 0x0
- div -> 0: 0x0
复制代码
|
|