Bitové pole - zakódovat a dekódovat datum do 2 bytu. – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Bitové pole - zakódovat a dekódovat datum do 2 bytu. – C / C++ – Fórum – Programujte.comBitové pole - zakódovat a dekódovat datum do 2 bytu. – C / C++ – Fórum – Programujte.com

 

arny
~ Anonymní uživatel
15 příspěvků
18. 2. 2013   #1
-
0
-

Zdravim,

máme úkol na procvičení zkusit a potřeboval bych poradit.Zadání:

Začal jsem využitím bit. pole pro uložení datumu,kde den zabírá 5 bitů,měsíc 4 bity a rok 7 bitu.

Pro uloženi roku je jen 7 bitu, což je pro nejvyšší uložené číslo 2^7 = 127.Tak k uloženému roku přičítám konstantu 1990.

 Zde je zatím můj dosavadní kód:

// encode_date.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

typedef struct {
	unsigned den	:5;
	unsigned mesic	:4;
	unsigned rok	:7;
} DATUM;

DATUM dnes;

short encode_date(char day, char month, short year) {
	dnes.den = day;
	dnes.mesic = month;
	dnes.rok = year - 1990;
	return 0;
}

void decode_date(short date, int * day, int * month, int * year) {
	
}

int _tmain(int argc, _TCHAR* argv[])
{
	encode_date(18,6,2013);
	printf("%d", dnes.rok + 1990);
	return 0;
}

Moc nechápu co má vracet short encode_date ? a jak kdyžtak dekodovat potom to datum.

Předem děkuji za rady.   

Nahlásit jako SPAM
IP: 46.33.117.–
vitamin+8
Grafoman
18. 2. 2013   #2
-
0
-

asi %dnes pretypovany na short:

return (short)dnes;

edit: ale nie je to asi moc prenositelne medzi platformami, mozno by bolo lepsie spravyt to cez bitove operacie.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
arny
~ Anonymní uživatel
15 příspěvků
18. 2. 2013   #3
-
0
-

#2 vitamin
To jsem zkoušel a vypíše to: error C2440: 'type cast' : cannot convert from 'DATUM' to 'short'    

Nahlásit jako SPAM
IP: 46.33.117.–
arny
~ Anonymní uživatel
15 příspěvků
18. 2. 2013   #4
-
0
-

#3 arny
#2 vitamin

A přes bit. operace by to šlo jak? 

Nahlásit jako SPAM
IP: 46.33.117.–
vitamin+8
Grafoman
18. 2. 2013   #5
-
0
-

 Takto:

#include <stdint.h>

typedef struct{
	uint16_t day;
	uint16_t month;
	uint16_t year;
} date_t;

uint16_t encode_date(date_t date) {
	uint16_t x=0;
	
	date.month <<= 5;
	date.year -= 1990;
	date.year <<= 9;
	
	x |= date.day;
	x |= date.month;
	x |= date.year;
	
	return x;
}
date_t decode_date(uint16_t x) {
	//toto si skus sam
}

edit: to pretypovanie sa dalo aj takto:

uint16_t x = *(uint16_t*)&date;

ale nemusi to fungovat vsade

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

Kopírování bytů — založil oxidián

Jak "dekódovat" řetězec — založil Farrell

Posilani bytu pres ethernet — založil Jirka

Bitové operátory — založil Dotem

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý