Προς το περιεχόμενο

Συναρτηση ftell της C


panoupanou

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας. Η συνάρτηση ftell της C δίνει την θέση του indicator ενος αρχείου σε bytes. Oπότε αν έχω ένα αρχειο με χαρακτήρες τότε δίνει την θέση βάσει τον αριθμο των χαρακτήρων που προηγουνται του indicator (αφου ενας χαρακτηρας είναι 1 byte).

Τα είπα σωστά? η καπου υπαρχει λάθος. :rolleyes:

Δημοσ.

αυτό που λες ισχύει στα binary-files. Στα text-files δεν ισχύει πάντα, αλλά τότε η επιστρεφόμενη τιμή μπορεί να χρησιμοποιηθεί για να θέσει ξανά την τρέχουσα θέση π.χ. με χρήση της συνάρτησης fseek.

Δημοσ.

Οκ.Ευχαριστώ.

Ναι και εγω ετσι την χρησιμοποιω δυο φορές για να έχω την διαφορά σε bytes που θέλει η fseek.

Ξέρεις σε ποίες περιπτώσεις δεν ισχύει το character=byte? Εχει να κάνει με την κωδικοποίηση των χαρακτήρων? Αν ναι στους χαρακτηρες ASCII τι ισχύει?

Δημοσ.

Δεν χρειάζεται να γνωρίζουμε πόσα bytes καταλαμβάνει ο κάθε τύπος. Χρησιμοποιούμε τον τελεστή sizeof και καθαρίζουμε ;)

 

Π.χ. σε αυτή την περίπτωση: sizeof( char )

Δημοσ.

Οκ.Ευχαριστώ.

Ναι και εγω ετσι την χρησιμοποιω δυο φορές για να έχω την διαφορά σε 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)

 

 

 

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...