panoupanou Δημοσ. 27 Μαΐου 2011 Δημοσ. 27 Μαΐου 2011 Γειά σας. Η συνάρτηση ftell της C δίνει την θέση του indicator ενος αρχείου σε bytes. Oπότε αν έχω ένα αρχειο με χαρακτήρες τότε δίνει την θέση βάσει τον αριθμο των χαρακτήρων που προηγουνται του indicator (αφου ενας χαρακτηρας είναι 1 byte). Τα είπα σωστά? η καπου υπαρχει λάθος.
ExaByte Δημοσ. 27 Μαΐου 2011 Δημοσ. 27 Μαΐου 2011 αυτό που λες ισχύει στα binary-files. Στα text-files δεν ισχύει πάντα, αλλά τότε η επιστρεφόμενη τιμή μπορεί να χρησιμοποιηθεί για να θέσει ξανά την τρέχουσα θέση π.χ. με χρήση της συνάρτησης fseek.
panoupanou Δημοσ. 29 Μαΐου 2011 Μέλος Δημοσ. 29 Μαΐου 2011 Οκ.Ευχαριστώ. Ναι και εγω ετσι την χρησιμοποιω δυο φορές για να έχω την διαφορά σε bytes που θέλει η fseek. Ξέρεις σε ποίες περιπτώσεις δεν ισχύει το character=byte? Εχει να κάνει με την κωδικοποίηση των χαρακτήρων? Αν ναι στους χαρακτηρες ASCII τι ισχύει?
migf1 Δημοσ. 30 Μαΐου 2011 Δημοσ. 30 Μαΐου 2011 Δεν χρειάζεται να γνωρίζουμε πόσα bytes καταλαμβάνει ο κάθε τύπος. Χρησιμοποιούμε τον τελεστή sizeof και καθαρίζουμε Π.χ. σε αυτή την περίπτωση: sizeof( char )
παπι Δημοσ. 30 Μαΐου 2011 Δημοσ. 30 Μαΐου 2011 Οκ.Ευχαριστώ. Ναι και εγω ετσι την χρησιμοποιω δυο φορές για να έχω την διαφορά σε bytes που θέλει η fseek. Ξέρεις σε ποίες περιπτώσεις δεν ισχύει το character=byte? Εχει να κάνει με την κωδικοποίηση των χαρακτήρων? Αν ναι στους χαρακτηρες ASCII τι ισχύει? Στην ASCII ειναι ενα byte. UTF32/16/8 4byte/2byte/1byte για αυτα που υπαρχουν στην ASCII, για τα αλλα που δεν υπαρχουν στο ASCII ειναι 2,3 ή και 4 byte αναλογα. Για να καταλαβεις τι encoding υπαρχει σε ενα αρχειο, πρεπει να διαβασεις τα πρωτα 2,3 ή 4 byte που ειναι το BOM offtopic Δοκημασε αυτο >#include <Windows.h> #include <tchar.h> #include <stdio.h> int main(int,char** p) { const wchar_t *unicodeString= L"ASCII Ιου Τι Εφ οκτω"; char utf8[128]; memset(utf8,0,sizeof utf8); WideCharToMultiByte(CP_UTF8,0,unicodeString,-1,utf8,sizeof utf8,NULL,NULL); printf("len of unicode:%d (%dbytes)\n",wcslen(unicodeString),wcslen(unicodeString) * sizeof (wchar_t)); printf("len of utf8:%d (%dbytes)\n",wcslen(unicodeString), strlen(utf8)); return 0; } θα εχεις ως output το παρακατω >len of unicode:20 (40bytes) len of utf8:20 (31bytes)
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.