2013-11-28 2 views
0

난수 생성을위한 4 바이트의 공간이 있습니다.현재 시간을 사용하여 난수를 생성하는 방법

uint32_t create_handle(uint8_t container_id, uint8_t file_slot) 
{ 
    uint32_t handle; 

    time_t now = time(NULL); 
    handle = ((now << 24) & ~(0xFF)); 
    handle += (container_id << 4) + file_slot; /* Last byte is 4 bits of container + 4 bits of slot */ 
    return handle; 
} 

: 나는 지금까지 다음 한 현재 시간 (시대도 할 것)

을 채우기 위해 마지막 바이트는 용기와 슬롯 (이 질문에 대한 관련 없음)에 사용되는 그래서 3 바이트가 이 올바른지? 난 임의의 숫자를 생성 할 수 있지만 그것은 유효하게가는 경우 평가할 수 없습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+2

왜'rand()'를 사용하지 않으시겠습니까? 시간은 무작위성과 거리가 멀다. – perreal

+1

쉬프트는 항상 0을 채우고,'& ~ (0xFF) '는 필요 없습니다. –

답변

1

당신은 지금 8시에만 나가는 24 시프트하고 있습니다. 나는 8 시프트하고 싶다고 생각합니다. & ~(0xff)은 중복되었습니다.

난수 라이브러리 중 하나를 사용하는 것은 어떻습니까? 또는 초당 하나 이상의 핸들을 필요로하지 않습니까?

+0

예, 1 초 이상 필요하지 않습니다. 요구 사항은 내가 현재 시간을 사용한다는 것이다. – Nikhil

+1

@Nikhil, 나는 당신이 랜덤이 아닌 고유 한 숫자를 원한다고 생각한다. – perreal

1

srand (time(NULL))은 임의 화 시드를 제공합니다. rand()을 사용하면 임의의 숫자를 가져올 수 있습니다.

관련 문제